P
Philippe Mesmeur
Bonjours à tous,
Dans la Bible, l'ami Stroustrup conseil d'utiliser 0 à la place de NULL.
Il indique également pour ceux qui voudraient continuer à utiliser NULL d'en
faire la déclaration suivante:
const int NULL = 0;
Cependant, j'ai peur qu'en faisant une telle déclaration dans un .hpp, le
compilateur me cré un symbole (au sens "linkage" du terme) pour la
constante (i.e. une sorte de variable globale non-modifiable) par
fichier .cpp incluant le fameux header.
Au final, l'étape de link risque d'etre douloureuse!!!!
Apres quelques tests (un peu trop à la va-vite je dois l'avouer) il
semblerait que:
- GCC) arrive linker SI la variable est "const" dans le cas contraire, il
n'y parvient pas!!!
- Visual 6.0) n'arrive jamais à linker
Avez vous des info à ce sujet? est-ce GCC qui fait des optimisations dans
certains cas? est-ce Visual 6.0 qui a une/des limitation(s) à se sujet?
Est-ce moi qui ai mal fait mes tests ("vite fait mal fait")?
De plus je pense que sa proposition est assez moyenne car meme si je peux -
dans un de mes headers - redéfinir NULL par "const int NULL = 0;" je cours
de grands risques avec l'inclusion de headers standards: mon NULL rentrera
en conflit avec le NULL standard et se dernier remplacera le miens au
préprocessing pour me donner un résultat assez ... tordu!!!
Ou alors:
- je peux faire avant ma définition un #undef NULL
- je peux faire mon propre NULL: "const int MYNULL = 0;"
Merci de votre réaction
Philippe
Dans la Bible, l'ami Stroustrup conseil d'utiliser 0 à la place de NULL.
Il indique également pour ceux qui voudraient continuer à utiliser NULL d'en
faire la déclaration suivante:
const int NULL = 0;
Cependant, j'ai peur qu'en faisant une telle déclaration dans un .hpp, le
compilateur me cré un symbole (au sens "linkage" du terme) pour la
constante (i.e. une sorte de variable globale non-modifiable) par
fichier .cpp incluant le fameux header.
Au final, l'étape de link risque d'etre douloureuse!!!!
Apres quelques tests (un peu trop à la va-vite je dois l'avouer) il
semblerait que:
- GCC) arrive linker SI la variable est "const" dans le cas contraire, il
n'y parvient pas!!!
- Visual 6.0) n'arrive jamais à linker
Avez vous des info à ce sujet? est-ce GCC qui fait des optimisations dans
certains cas? est-ce Visual 6.0 qui a une/des limitation(s) à se sujet?
Est-ce moi qui ai mal fait mes tests ("vite fait mal fait")?
De plus je pense que sa proposition est assez moyenne car meme si je peux -
dans un de mes headers - redéfinir NULL par "const int NULL = 0;" je cours
de grands risques avec l'inclusion de headers standards: mon NULL rentrera
en conflit avec le NULL standard et se dernier remplacera le miens au
préprocessing pour me donner un résultat assez ... tordu!!!
Ou alors:
- je peux faire avant ma définition un #undef NULL
- je peux faire mon propre NULL: "const int MYNULL = 0;"
Merci de votre réaction
Philippe