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
Fabien LE LEZ
On Wed, 15 Oct 2003 01:40:58 +0200, "Sylvain Togni"
wrote:

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.


Les noms tout en majuscules sont réservés aux constantes. Pour les
macros, quand je dois vraiment en mettre une, je le spécifie
clairement :

#define MACRO_ABSOLUTE ...

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

Avatar
blc
Loïc Joly wrote:
blc wrote:

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,
Oui, pardon..;-(


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.

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

par :
int const ABSOLUTE = 42;
En fait c'est dans un header windows qui est inclus par la bonte du st

esprit...;-(
En definissant des symboles a la compilation ca permet d'eviter mon
probleme. Mais il se posera forcement plus tard en utilisant d'autres
libs....


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é.
C'est ce que je vais faire mais je trouve ca dommage de "perdre"

certains noms uniquement parce qu'ils sont definis avant...

Merci pour la reponse,
Benoit

Avatar
kanze
Fabien LE LEZ wrote in message
news:...
On Wed, 15 Oct 2003 01:40:58 +0200, "Sylvain Togni"
wrote:

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.


Les noms tout en majuscules sont réservés aux constantes.


En C, les noms tout en majuscules étaient réservés aux constantes parce
que les constantes étaient des macros.

Moi, je n'oublie pas que les constantes des uns sont des variables des
autres (et combien de fois est-ce que mes constantes sont devenues des
variables initialisées depuis un fichier de configuration). En gros, ma
convention de nommage separe les noms en trois groupes :

- tout majuscule : des macros (à part T, T1, etc. comme paramètres de
template),

- première lettre majuscule, suivi des minuscules : les noms de type,
et

- première lettre minuscule, suivi des minuscules : toute la reste.

C'est une convention comme une autre ; je m'adapte à ce que veut le
client. Mais je n'aime pas les conventions qui distinguent entre les
constantes et les autres variables, parce que d'après l'expérience, les
constantes finissent toujours par ne plus l'être.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
Guillaume Gourdin
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


Une raison possible est que l'enum n'est utilisé qu'en interne à la classe.
Il est donc privé, ce qui limite les risques de collisions de noms.

Avatar
Michel Michaud
Dans news:,
client. Mais je n'aime pas les conventions qui distinguent entre les
constantes et les autres variables, parce que d'après l'expérience,
les constantes finissent toujours par ne plus l'être.


Si tu y penses bien, on pourrait appliquer ton raisonnement pour
dire qu'il faut absolument différencier les constantes des variables,
justement pour voir quand ça change ! Personnellement j'utilise les
majuscules pour les constantes pour des raisons pédagogiques -- et je
n'ai jamais eu de problème -- mais je comprends l'utilité de ne pas
faire ainsi.

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Sylvain Togni

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.


Les noms tout en majuscules sont réservés aux constantes.


Quel est l'intêret de distinguer les constantes des autre varaibles ?

--
Sylvain


Avatar
Loïc Joly
blc wrote:
Loïc Joly wrote:
[...]



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

par :
int const ABSOLUTE = 42;


En fait c'est dans un header windows qui est inclus par la bonte du st
esprit...;-(
En definissant des symboles a la compilation ca permet d'eviter mon
probleme. Mais il se posera forcement plus tard en utilisant d'autres
libs....


Peut être qu'un #undef ABSOLUTE juste après les #include de tous les
fichiers windows est une autre solution...

--
Loïc


Avatar
kanze
"Michel Michaud" wrote in message
news:<REejb.7443$...
Dans news:,

client. Mais je n'aime pas les conventions qui distinguent entre les
constantes et les autres variables, parce que d'après l'expérience,
les constantes finissent toujours par ne plus l'être.


Si tu y penses bien, on pourrait appliquer ton raisonnement pour dire
qu'il faut absolument différencier les constantes des variables,
justement pour voir quand ça change !


Et avoir à modifier toutes les utilisations. En revanche, une personne
m'a déjà dit que les « constantes » initialisées depuis un fichier de
configuration était encore logiquement des constantes (sauf évidemment
pour le code d'initialisation), et donc, qu'elles devaient toujours
porter des noms des constantes.

Personnellement j'utilise les majuscules pour les constantes pour des
raisons pédagogiques -- et je n'ai jamais eu de problème -- mais je
comprends l'utilité de ne pas faire ainsi.


Différentes utilisations, différentes contraintes, donc, différentes
solutions.

J'espère seulement que quand tu présentes tes conventions dans le cours,
tu dis bien, ne serait-ce qu'en passant, que d'autres conventions
existent, et que tout le monde ne distingue pas les constantes des
autres variables par des conventions de nommage.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
Michel Michaud
Dans news:bmk9ql$jlr$, Sylvain
Quel est l'intêret de distinguer les constantes des autre varaibles
?


Pouvoir distinguer facilement les constantes des autres variables ?

(Faciliter la compréhension du code. Quel est l'intérêt d'avoir
des identificateurs significatifs ? ...)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Michel Michaud
Dans news:,
"Michel Michaud" wrote in message
news:<REejb.7443$...
Dans news:,

client. Mais je n'aime pas les conventions qui distinguent entre
les constantes et les autres variables, parce que d'après
l'expérience, les constantes finissent toujours par ne plus
l'être.


Si tu y penses bien, on pourrait appliquer ton raisonnement pour
dire qu'il faut absolument différencier les constantes des
variables, justement pour voir quand ça change !


Et avoir à modifier toutes les utilisations. En revanche, une
personne m'a déjà dit que les « constantes » initialisées depuis un
fichier de configuration était encore logiquement des constantes
(sauf évidemment pour le code d'initialisation), et donc, qu'elles
devaient toujours porter des noms des constantes.


C'est assez logique. Quel est le problème ?

[...]
J'espère seulement que quand tu présentes tes conventions dans le
cours, tu dis bien, ne serait-ce qu'en passant, que d'autres
conventions existent, et que tout le monde ne distingue pas les
constantes des autres variables par des conventions de nommage.


Bien entendu.

Même sur mon site (http://www.gdzid.com/Cplusplus.html), on peut
lire « Les règles qu'on a choisies ne sont pas universelles :
certaines compagnies peuvent imposer des règles en contradiction
complète dans certains cas. ».

En fait, je vois bien plus souvent l'idée de ne pas mettre les
constantes en majuscules présentée sans nuance...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



1 2 3 4 5