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 Thu, 16 Oct 2003 22:18:21 -0400, "Michel Michaud"
wrote:

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 ? ...)


Ben justement, un identificateur vraiment significatif devrait
indiquer clairement le rôle de la variable, et du coup sa const-ness
serait évidente pour le lecteur... dans l'idéal, bien sûr ;-)

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


Avatar
kanze
"Michel Michaud" wrote in message
news:<frIjb.5501$...

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


Disons qu'a priori, je m'attendrais plutôt à voir des raisons pourquoi
on distingue entre deux choses. Si on ne distingue pas, on n'en parle
pas.

Donc, quand je présente mes règles, j'explique pourquoi je veux que les
macros aient un nom identifiable, puis pourquoi je veux pouvoir
distinguer entre les types et les autres choses. Je n'explique
effectivement pas pourquoi je ne distingue pas entre les constantes et
les non constantes, de même que je n'explique pas pourquoi je ne
distingue pas entre les types flottants et les types entiers.

Globalement, je crois que c'est juste, mais étant donné l'histoire de
distinguer les constantes en C/C++ (parce qu'une telle tradition
n'existait pas dans le monde de Pascal, d'où je viens), je vois qu'une
explication pourquoi ne pas distinguer les constantes pourrait être
utile.

En passant, je n'ai jamais vu cette tradition des constantes en
majuscules en dehors de la famille C -- en Pascal et ces déscendants
directs (Modula-2 et Modula-3 au moins), ce sont les mots clé qui sont
tout en majuscule, et c'est AMHA encore la meilleur tradition, même si
on ne peut pas l'appliquer en C/C++. En Ada, je n'ai vu aucune
différence entre les variables et les constantes dans les exemples que
j'ai pu voir, et je n'ai rien vu tout en majuscules. En Eiffel, au moins
dans les exemples que j'ai pu voir, c'était les types qui étaient tout
en majuscule. Je n'ai pas trouvé des symboles (constante ou d'autres)
tout en majuscules dans le code elisp qui pilote emacs non plus (mais je
ne crois pas qu'elisp ait des constantes, dans le sens que C/C++ les a).

--
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
kanze
"Michel Michaud" wrote in message
news:<SjIjb.5499$...
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 ? ...)


Mais qu'est-ce qui distingue une constante d'une autre variable ?

Et c'est une vraie question. Ce n'est pas le fait qu'elle ne change pas.
Je ne crois pas que par « constante », tu comprends des paramètres d'une
fonction -- tu n'écris pas :

void
f( MaClasse const& LE_PARAMETRE ) ...

par exemple. Intuitivement, je crois savoir, mais je n'arrive pas non
plus à le définir de façon claire (peut-être parce que je n'ai pas
essayé).

--
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
Fabien LE LEZ
On 17 Oct 2003 01:46:24 -0700, wrote:

Mais qu'est-ce qui distingue une constante d'une autre variable ?


Perso, j'aurais tendance à mettre en majuscules les constantes connues
à la compilation, i.e. celles qu'on aurait très bien pu remplacer par
des "magic values" si on codait comme des gorets.

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

Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

On 17 Oct 2003 01:46:24 -0700, wrote:

Mais qu'est-ce qui distingue une constante d'une autre variable ?


Perso, j'aurais tendance à mettre en majuscules les constantes connues
à la compilation, i.e. celles qu'on aurait très bien pu remplacer par
des "magic values" si on codait comme des gorets.


Quel info ca apporte?

En fait, je veux une convention propre pour les macros. Si en plus il
y en a une pour les constantes, je n'en vois pas reellement l'utilite
mais ca n'a pas reellement d'importance. Je ne vois un probleme que
si c'est la meme convention que pour les macros (et que les constantes
definies par des macros doivent respecter la convention des macros
plutot que celle des constantes).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
kanze
Fabien LE LEZ wrote in message
news:...

On 17 Oct 2003 01:46:24 -0700, wrote:

Mais qu'est-ce qui distingue une constante d'une autre variable ?


Perso, j'aurais tendance à mettre en majuscules les constantes connues
à la compilation, i.e. celles qu'on aurait très bien pu remplacer par
des "magic values" si on codait comme des gorets.


C-à-d celles qui vont être initialisées à partir d'un fichier de
configuration dans la prochaine version ?

--
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
Fabien LE LEZ
On 17 Oct 2003 07:55:28 -0700, wrote:

C-à-d celles qui vont être initialisées à partir d'un fichier de
configuration dans la prochaine version ?


Si jamais ça arrive (dans mon code), il y a des chances pour que la
"constante" soit alors modifiable en cours d'exécution (GUI oblige).
Du coup, ça devient une variable globale, que je transforme
généralement en appel de fonction. Du coup, il y a des modifications à
faire de toutes façons ;-)

En fait, j'utilise plutôt des constantes en majuscules à visibilité
réduire à une fonction, et les majuscules m'aide à savoir que l'objet
gardera la même valeur jusqu'à la fin de la fonction.

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

Avatar
Fabien LE LEZ
On Fri, 17 Oct 2003 19:19:25 +0200, Fabien LE LEZ
wrote:

visibilité
réduire à une fonction


Lire "réduite", bien sûr...

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

Avatar
Loïc Joly
Jean-Marc Bourguet wrote:
Fabien LE LEZ writes:


On 17 Oct 2003 01:46:24 -0700, wrote:


Mais qu'est-ce qui distingue une constante d'une autre variable ?


Perso, j'aurais tendance à mettre en majuscules les constantes connues
à la compilation, i.e. celles qu'on aurait très bien pu remplacer par
des "magic values" si on codait comme des gorets.



Quel info ca apporte?


Qu'on peut les utiliser comme taille de tableau, ou encore comme
paramètre template ?


--
Loïc



Avatar
Jean-Marc Molina
ce qui ne marche pas forcement tres bien..;-)


En effet le plus simple c'est de préfixer les propriétés de ton enum par le
nom de l'enum :
enum MON_ENUM
{
MON_ENUM_ABSOLUTE = 0,
MON_ENUM_SEMI_RELATIVE = 1,
MON_ENUM_RELATIVE = 2
};

On peut voir ça dans des bibliothèques comme MFC ou DirectX par exemple.

JM

--
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)

1 2 3 4 5