OVH Cloud OVH Cloud

Constante dans un .h

16 réponses
Avatar
Guillaume GOURDIN
Bonjour à tous,

quelle serait, selon vous, la meilleure stratégie pour définir une
constante dans un .h, afin qu'elle soit accessible à l'exterieur.

J'en voie 2 :

- le #define (#define CONSTANTE 10), je n'aime pas, rien ne me garantie
que ce #define ne sera pas écrasé par la suite.

- la fonction (int GetConstante()), je ne suis pas fan non plus. Même si
cette méthode semble plus sûre, je ne garantie plus la constance de la
constante. Par exemple, rien n'interdit l'utilisateur d'écrire:
int constante = GetConstante();
constante += 2;

Il y a éventuellement une troisième voie que je ne maitrise pas trop, en
utilisant 'extern'.

Merci de vos éclaircissements!

10 réponses

1 2
Avatar
Sylvain Togni
Guillaume GOURDIN wrote:

quelle serait, selon vous, la meilleure stratégie pour définir une
constante dans un .h, afin qu'elle soit accessible à l'exterieur.


int const constante = 10;

tout simplement.

--
Sylvain Togni

Avatar
Guillaume GOURDIN
quelle serait, selon vous, la meilleure stratégie pour définir une
constante dans un .h, afin qu'elle soit accessible à l'exterieur.


int const constante = 10;

tout simplement.


Il me semble avoir essayé et avoir eu des problemes a l"édition de liens...


Avatar
Fabien LE LEZ
On Wed, 24 Jan 2007 18:47:38 +0100, Guillaume GOURDIN :

Il me semble avoir essayé et avoir eu des problemes a l"édition de liens...


Et avec ceci ?
static int const constante= 10;

Avatar
Guillaume GOURDIN
Fabien LE LEZ wrote:
On Wed, 24 Jan 2007 18:47:38 +0100, Guillaume GOURDIN :

Il me semble avoir essayé et avoir eu des problemes a l"édition de liens...


Et avec ceci ?
static int const constante= 10;



Après quelques tests, il semble que le 'static' ne soit pas nécessaire,
et que Sylvain avait vu juste : 'const int constante = 10;' fonctionne.

Merci d'avoir répondu si vite!


Avatar
Guillaume GOURDIN
Après quelques tests, il semble que le 'static' ne soit pas nécessaire,
et que Sylvain avait vu juste : 'const int constante = 10;' fonctionne.

Merci d'avoir répondu si vite!


J'ai fait d'autres tests, et en fait si je compile avec g++, tout va
bien, mais j'ai effectivement un problème à l'édition de lien si je
compile avec gcc. Quelqu'un a t'il une explication ?

Avatar
Fabien LE LEZ
On Wed, 24 Jan 2007 20:07:14 +0100, Guillaume GOURDIN
:

J'ai fait d'autres tests, et en fait si je compile avec g++, tout va
bien, mais j'ai effectivement un problème à l'édition de lien si je
compile avec gcc. Quelqu'un a t'il une explication ?


J'avoue que j'ai du mal avec les constantes, cas particulier s'il en
est.

[Note : 1 module = 1 .cpp, avec tous les .h #inclus]

Toutefois, si tu déclares une variable en-dehors d'une fonction, elle
est automatiquement globale. Et si tu déclares la même variable dans
un autre module, il y a collision au moment du link : deux variables
avec la même portée et le même nom.
Si tu la déclares "static", par contre, sa portée est réduite au
module ; tu peux alors avoir plusieurs variables de même nom dans
plusieurs modules différents.

Avatar
Cyrille
Guillaume GOURDIN wrote:

quelle serait, selon vous, la meilleure stratégie pour définir une
constante dans un .h, afin qu'elle soit accessible à l'exterieur.


int const constante = 10;

tout simplement.


Oui, et
enum { constante = 10 };

aussi.

--
http://www.assemblee-nationale.fr/12/propositions/pion3372.asp
Ça doit être chouette de vivre dans un pays libre...


Avatar
Cyrille
Après quelques tests, il semble que le 'static' ne soit pas nécessaire,
et que Sylvain avait vu juste : 'const int constante = 10;' fonctionne.

Merci d'avoir répondu si vite!


J'ai fait d'autres tests, et en fait si je compile avec g++, tout va
bien, mais j'ai effectivement un problème à l'édition de lien si je
compile avec gcc. Quelqu'un a t'il une explication ?


Quand on veut compiler un programme C++, on utilise g++.

Extrait de "man g++":

g++ is a program that calls GCC with the default language set to C++,
and automatically specifies linking against the C++ library.

J'imagine que si on explique que g++ c'est ça, ça veut dire que pour
gcc, le default language est C, et qu'on ne lie pas la bibliothèque C++.

--
http://www.assemblee-nationale.fr/12/propositions/pion3372.asp
Ça doit être chouette de vivre dans un pays libre...


Avatar
Sylvain
Guillaume GOURDIN wrote on 24/01/2007 18:47:
quelle serait, selon vous, la meilleure stratégie pour définir une
constante dans un .h, afin qu'elle soit accessible à l'exterieur.


int const constante = 10;

tout simplement.


Il me semble avoir essayé et avoir eu des problemes a l"édition de liens...


si le .h est inclus par différents .cpp (cas exceptionnel d'un projet
non constitué d'un seul main.cpp -- j'ironise bien sur) il y aura une
définition multiple de la constante et des plaintes du linkeur.

vous pouvez la déclarer N fois (une seule fois suffit):

.h

extern const int constante;

et la définir une seule et unique fois:

.cpp

const int constante = 100;

Sylvain.



Avatar
Bruno Causse
"Sylvain" a écrit dans le message de news:
45b7d924$0$27377$

vous pouvez la déclarer N fois (une seule fois suffit):

.h

extern const int constante;

et la définir une seule et unique fois:

.cpp

const int constante = 100;



je declare mes constantes a l'interieur des classes, je n'ai aucune
variables declarés autrement(qui ne soit pas "ratachée a une classe").

est ce une bonne methode?

1 2