🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15676

Re: Syntaxe enum

#15676
From: Pierre Maurette
Date: Mon, 05 Sep 2005 19:07
81 lines
4458 bytes
David Noyelle, le 05/09/2005, a �crit :
> Bonjour,
>
> je cherche la syntaxe pour mettre en place un enum avec des valeurs int 
> allant de '-1' a '-14'. Cette valeur est en fait le code de retour d'une 
> fonction, et ca me semble un peu long avec un switch...
? Justement, renvoyer un code d'erreur dans une enum est une bonne 
solution qui augmente la lisibilit� mais pas la compacit�. De plus, 
l'utilisation normale entra�ne pratiquement le switch .. case.


> par ex:
>
> enum TYPE_ERREUR_1 {-1, -2, -3, -4, -5, -6, -7};
> enum TYPE_ERREUR_2 {-1, -2, -3, -4, -5, -6, -7};
> ................
> int_retour = maFonction();
>
> switch(int_retour)
> {
>   case TYPE_ERREUR_1:
>     ................
>     break;
>   case TYPE_ERREUR_2:
>     ................
>     break;
> }
>
>
> Merci d'avance pour vos suggestions,
Vous semblez d�buter dans les enum, non ?
Une enum est une fa�on de d�clarer facilement et d'utiliser de fa�on 
lisible des s�ries des constantes. Dans le cas g�n�ral (on oublie les 
cas particuliers, qui existent pourtant), on ne fera pas de calcul sur 
les enum, essentiellement des affectations et des comparaisons 
d'�galit�. Normalement, on ne doit pas avoir � conna�tre la valeur 
num�rique sous-jacente. Un exemple:
enum type_erreur {
  NO_ERREUR /* = 0 */,
  ERREUR_POIVRE,
  ERREUR_CUISSON,
  ERREUR_FRIGO,
  ERREUR_HUILE
};
Par d�faut, les valeurs sont affect�es automatiquement, � partir de 0, 
en incr�mentant de 1 � chaque fois. On peut forcer n'importe quel champ 
de l'enum, �ventuellement tous. Si vous utilisez le fait que NO_ERREUR 
est �gal � 0, parce que vous pr�f�rez �crire if(erreur) plut�t que 
if(erreur != NO_ERREUR), alors pr�cisez-le, m�me si c'est redondant.
Pour les autres valeurs, si vous utilisez des tests
if(erreur == ERREUR_XXXX) ou un switch ... case, vous vous en fichez.
Vous voulez rajouter un cas d'erreur, le sel. Vous modifiez l'enum:
enum type_erreur {
  NO_ERREUR,
  ERREUR_POIVRE,
  ERREUR_SEL,
  ERREUR_CUISSON,
  ERREUR_FRIGO,
  ERREUR_HUILE
};
et vous ajoutez un bloc � votre switch ... case.

[Dans les cas particulier, il y la possibilit� de renvoyer par exemple 
un code signifiant plusieurs cas, par exemple qu'il manque du sel et 
qu'il y a un probl�me de frigo]

Il faut donc avoir de bonnes raisons pour imposer des valeurs 
num�riques � un enum. Peut-�tre votre id�e est-elle celle d'une 
fonction renvoyant un entier int que vous *savez* positif ou nul, et 
d'utiliser les valeurs n�gatives pour renvoyer un code d'erreur. Je ne 
suis pas s�r que ce soit une tr�s bonne id�e. J'ai eu fait ce genre de 
truc, aujourd'hui si mon code y gagnait beaucoup, je ferais une enum 
normale qui d�marre � 1, et je renverrai :
return - (int)ERREUR_XXXX;


-- 
Pour r�pondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette
Technical Details
Message-ID: <mn.2cf37d598769d522.31483@laposte.net>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!newsread.com!newsprint.newsread.com!news-out1.kabelfoon.nl!newsfeed.kabelfoon.nl!bandi.nntp.kabelfoon.nl!194.25.134.62.MISMATCH!newsfeed00.sul.t-online.de!t-online.de!tiscali!newsfeed1.ip.tiscali.net!proxad.net!infeed-1.proxad.net!news2-e.free.fr!not-for-mail
References: <431c738f$0$11084$626a14ce@news.free.fr>

Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,4e37a5742151792c
X-Google-Attributes: gidf9822,public
X-Google-Language: FRENCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!newsread.com!newsprint.newsread.com!news-out1.kabelfoon.nl!newsfeed.kabelfoon.nl!bandi.nntp.kabelfoon.nl!194.25.134.62.MISMATCH!newsfeed00.sul.t-online.de!t-online.de!tiscali!newsfeed1.ip.tiscali.net!proxad.net!infeed-1.proxad.net!news2-e.free.fr!not-for-mail
Subject: Re: Syntaxe enum
From: "Pierre Maurette" <mmaauurreetttteeppiieerrrree@wwaannaaddoooo.ffrr>
References: <431c738f$0$11084$626a14ce@news.free.fr>
Newsgroups: fr.comp.lang.c
Message-ID: <mn.2cf37d598769d522.31483@laposte.net>
X-Newsreader: MesNews/1.04.00.00
Date: Mon, 05 Sep 2005 21:07:54 +0200
MIME-Version: 1.0
X-Face: cmi$3R1_J{[}5K|8d'LDiJ$SsZ*gn,j*PhJ#KVGt+45,E_N9O}GrhhQ>fb&q<&lz=g%PEv' u"m)N|KrBMux?2:E?N7Uw3L#H>L#GwM}<qH-?#_Y$B9]$q1"~iUGtN#HVy?}7.`m&iKF>gY:.`W.qu z`1'W'h-AXPmB]#7~<+@H.<0M`-jBkCWbmkcT_*LBVD3|p1a?h1H;cHq{$-vbeP@Hdcqp5z~lwU7ZK `~
Reply-To: mmaauurreetttteeppiieerrrree@wwaannaaddoooo.ffrr
Content-Type: text/plain; charset="iso-8859-15"; format=flowed
Content-Transfer-Encoding: 8bit
X-Antivirus: avast! (VPS 0536-0, 05/09/2005), Outbound message
X-Antivirus-Status: Clean
Lines: 83
Organization: Guest of ProXad - France
NNTP-Posting-Date: 05 Sep 2005 21:07:16 MEST
NNTP-Posting-Host: 84.98.222.233
X-Trace: 1125947236 news2-e.free.fr 32528 84.98.222.233:4394
X-Complaints-To: abuse@proxad.net