OVH Cloud OVH Cloud

namespace et enum

44 réponses
Avatar
blc
Bonjour a tous (et a toutes aussi)

Je cherche a definir une "suite" de constantes.
Je fais un truc du genre:

namespace mon_namespace
{
class ma_classe
{
<...>
enum MON_ENUM
{
ABSOLUTE = 0,
SEMI_RELATIVE = 1,
RELATIVE = 2
};
}
}

1) Est ce que c'est, d'apres vous, une "bonne" facon de faire?
2) Si oui (mais je pense que non), j'ai un pb:
ABSOLUTE est deja declaree comme constantes dans certains headers ce qui
donne apres le preproceseur:
enum MON_ENUM
{
1 = 0,
SEMI_RELATIVE = 1,
RELATIVE = 2
};

ce qui ne marche pas forcement tres bien..;-)

Qq1 parmi vous aurait il un conseil pour eviter ce genre de problemes?

En esperant que ma question ne soit pas trop con...

Merci d'avance,
Benoit

10 réponses

1 2 3 4 5
Avatar
Loïc Joly
blc wrote:
Bonjour a tous (et a toutes aussi)

Je cherche a definir une "suite" de constantes.
Je fais un truc du genre:

namespace mon_namespace
{
class ma_classe
{
<...>
enum MON_ENUM
{
ABSOLUTE = 0,
SEMI_RELATIVE = 1,
RELATIVE = 2
};
}
}

1) Est ce que c'est, d'apres vous, une "bonne" facon de faire?
Pourquoi pas, je ne vois pas trop pourquoi l'énum est dans une class,

mais il y a probablement une bonne raison dans le reste du programme.

2) Si oui (mais je pense que non), j'ai un pb:
ABSOLUTE est deja declaree comme constantes dans certains headers ce qui
donne apres le preproceseur:
enum MON_ENUM
{
1 = 0,
SEMI_RELATIVE = 1,
RELATIVE = 2
};

ce qui ne marche pas forcement tres bien..;-)


En fait, ABSOLUTE n'est pas déclarée comme une cosntante, sinon, çe ne
poserait pas de problème. ABSOLUTE doit être une macro, qui se moque
totalement des règles de portée. C'est d'ailleurs une des raisons
principales pourquoi on préfère les constantes aux macros.


Qq1 parmi vous aurait il un conseil pour eviter ce genre de problemes?


Si tu as accès à la définition d'ABSOLUTE, remplace un truc genre :
#define ABSOLUTE 42

par :
int const ABSOLUTE = 42;

Sinon, remplace le nom de ta valeur d'énum par autre chose. Tu peux par
exemple la préfixer par 1 ou 2 lettre qui rappelle le type d'énum associé.

--
Loïc

Avatar
Fabien LE LEZ
On Tue, 14 Oct 2003 20:12:03 +0200, Loïc Joly
wrote:

#define ABSOLUTE 42


P'tite question de psychologie : as-tu choisi 42 en connaissance de
cause ou est-ce ton subconscient qui s'en est chargé ? ;-)

--
http://www.giromini.org/usenet-fr/repondre.html

Avatar
Gourgouilloult
Fabien LE LEZ wrote:
Loïc Joly wrote:

#define ABSOLUTE 42


P'tite question de psychologie : as-tu choisi 42 en connaissance de
cause ou est-ce ton subconscient qui s'en est chargé ? ;-)


Bah, c'est bien la réponse à la question de la vie, de l'univers et tout
ça, non ? D'où le nom de la macro : c'est la constante absolue.
D'ailleurs, quelque chose d'aussi important mérite bien de transcender
les scopes...

Gourgou
Oups ;)


Avatar
Fabien LE LEZ
On Tue, 14 Oct 2003 21:23:10 +0200, Gourgouilloult
<gourgou_at_club-internet_point_fr> wrote:

Bah, c'est bien la réponse à la question de la vie, de l'univers et tout
ça, non ?


Yep. Mais ça revient tellement souvent que je me demande parfois si
ceux qui l'utilisent l'utilisent consciemment, ou si c'est juste le
premier nombre que leur subconscient met à leur disposition quand ils
ont besoin d'un nombre quelconque ;-)

--
http://www.giromini.org/usenet-fr/repondre.html

Avatar
Loïc Joly
Fabien LE LEZ wrote:

On Tue, 14 Oct 2003 20:12:03 +0200, Loïc Joly
wrote:


#define ABSOLUTE 42



P'tite question de psychologie : as-tu choisi 42 en connaissance de
cause ou est-ce ton subconscient qui s'en est chargé ? ;-)


J'ai mis 42 consciemment, en tant que réponse ultime, mais je n'ai pas
pensé au lien que ce nombre avait en particulier avec une constante
nommé ABSOLUTE. Comme quoi...

--
Loïc


Avatar
Gabriel Dos Reis
Loïc Joly writes:

[...]

| J'ai mis 42 consciemment, en tant que réponse ultime, mais je n'ai pas
| pensé au lien que ce nombre avait en particulier avec une constante
| nommé ABSOLUTE. Comme quoi...

Le nombre absolu d'années de cotisation dans le privé s'élèvera à
combien, d'après nos gouvernants ?

-- Gaby
Avatar
Fabien LE LEZ
On 14 Oct 2003 22:43:13 +0200, Gabriel Dos Reis
wrote:

Le nombre absolu d'années de cotisation dans le privé s'élèvera à
combien, d'après nos gouvernants ?


Pour ma génération (j'ai 25 ans), je dirais environ 154 ans.

--
http://www.giromini.org/usenet-fr/repondre.html

Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| On 14 Oct 2003 22:43:13 +0200, Gabriel Dos Reis
| wrote:
|
| >Le nombre absolu d'années de cotisation dans le privé s'élèvera à
| >combien, d'après nos gouvernants ?
|
| Pour ma génération (j'ai 25 ans), je dirais environ 154 ans.

Veinard !

-- Gaby
Avatar
Sylvain Togni

En fait, ABSOLUTE n'est pas déclarée comme une cosntante, sinon, çe ne
poserait pas de problème. ABSOLUTE doit être une macro, qui se moque
totalement des règles de portée. C'est d'ailleurs une des raisons
principales pourquoi on préfère les constantes aux macros.


Qq1 parmi vous aurait il un conseil pour eviter ce genre de problemes?


Si tu as accès à la définition d'ABSOLUTE, remplace un truc genre :
#define ABSOLUTE 42

par :
int const ABSOLUTE = 42;

Sinon, remplace le nom de ta valeur d'énum par autre chose. Tu peux par
exemple la préfixer par 1 ou 2 lettre qui rappelle le type d'énum associé.


Je rajouterai également qu'une bonne habitude à prendre est de
réserver les noms tout en majuscules aux macros. Comme ça plus de
problèmes de ce genre.

--
Sylvain


Avatar
Gourgouilloult
Fabien LE LEZ wrote:

Bah, c'est bien la réponse à la question de la vie, de l'univers et tout
ça, non ?


Yep. Mais ça revient tellement souvent que je me demande parfois si
ceux qui l'utilisent l'utilisent consciemment, ou si c'est juste le
premier nombre que leur subconscient met à leur disposition quand ils
ont besoin d'un nombre quelconque ;-)


J'imagine que l'un entraine l'autre. Par contre lequel, du nombre ultime
ou du penchant subconscient, fait la poule ou fait l'oeuf...

Gourgou


1 2 3 4 5