 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Philippe Mesmeur Guest
|
Posted: Thu Feb 03, 2005 11:41 pm Post subject: const int NULL = 0 |
|
|
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
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Fri Feb 04, 2005 3:38 am Post subject: Re: const int NULL = 0 |
|
|
Philippe Mesmeur <philippe.mesmeur (AT) noos (DOT) fr> writes:
| Quote: | 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.
|
should not happen.
| Quote: | Au final, l'étape de link risque d'etre douloureuse!!!!
|
Non.
| Quote: | 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!!!
|
Oui, et c'est ce que demande C++ depuis très longtemps. C'est pour ça
qu'il a dit
const int NULL = 0;
et non
int NULL = 0;
Chaque mot a son importance.
| Quote: | - Visual 6.0) n'arrive jamais à linker
|
Visual 6.0 n'arrive pas à faire beaucoup de choses.
| Quote: | 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!!!
|
Oui. Mais alors peux-tu citer exactement ce qu'il a écrit ?
-- Gaby
|
|
| Back to top |
|
 |
Ivan Vecerina Guest
|
Posted: Fri Feb 04, 2005 5:55 am Post subject: Re: const int NULL = 0 |
|
|
"Philippe Mesmeur" <philippe.mesmeur (AT) noos (DOT) fr> wrote
| Quote: | 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)
....
- Visual 6.0) n'arrive jamais à linker
Faute à sa non-conformité avec le standard C++. |
Si une portabilité sur de tels compilateurs est désirable,
une alternative est:
enum { NULL=0 };
| Quote: | 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
|
J'éviterai effectivement tout court d'utiliser l'identifiant NULL.
Cette macro n'apporte rien, et n'est à mon avis pas plus
judicieuse que... disons:
#define IF(x) if(x) {
#define END_IF }
Certes, une notation permettant de distinguer 'nul' de 'zéro'
peut avoir des avantages.
Pour ma part, j'utilise tout simplement 00 quand la valeur
représente un pointeur, comme j'écris 0.0 pour une constante
double. NULL est purement et simplement sorti de mon vocabulaire,
et c'est l'option que je, modestement, je recommande également.
Salutations,
Ivan
--
http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form
|
|
| Back to top |
|
 |
PurL Guest
|
Posted: Fri Feb 04, 2005 8:35 am Post subject: Re: const int NULL = 0 |
|
|
| Quote: | NULL est purement et simplement sorti de mon vocabulaire,
|
Pourquoi ? NULL ne vaut-il pas zero ?
PurL
|
|
| Back to top |
|
 |
Frederic Py Guest
|
Posted: Fri Feb 04, 2005 9:19 am Post subject: Re: const int NULL = 0 |
|
|
On 2005-02-04 09:35:57 +0100, "PurL" <purl-nospam (AT) chez (DOT) com> said:
| Quote: | NULL est purement et simplement sorti de mon vocabulaire,
Pourquoi ? NULL ne vaut-il pas zero ?
|
C'est un éternel débat dont tu peux trouver les traces sur google news
mais en resume un des arguments pourrait être "si ce dernier vaut 0
pourqhuoi ne pas utiliser 0 directement ?" avec tout ce qui endécoule
mais plutôt que de se lancer la dedans je te conseille de chercher dans
les archives de fclc++ et de te faire ta propre idée aprés
--
Fred
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Fri Feb 04, 2005 9:21 am Post subject: Re: const int NULL = 0 |
|
|
Philippe Mesmeur wrote:
| Quote: | Dans la Bible, l'ami Stroustrup conseil d'utiliser 0 à la
place de NULL.
|
C'est son avis. C'est une question où les avis sont partagés.
| Quote: | Il indique également pour ceux qui voudraient continuer à
utiliser NULL d'en faire la déclaration suivante:
const int NULL = 0;
|
C'est illégal, au moins si tu inclus le moindre en-tête. Ne le
fais pas, en aucun cas.
Si tu veux utiliser NULL, il n'y a qu'une seule façon de
l'avoir :
#include <stddef.h>
(OK, il y en a plusieurs, parce qu'à la place de <stddef.h>, tu
peux utiliser <cstddef>, <stdlib.h>, <stdio.h>, ...)
NULL fait partie de la norme. C'est du C++ standard. Tu n'as pas
le droit de le définir toi-même.
| Quote: | 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
|
NULL est un symbole. C'est ce que tu veux, non ?
| Quote: | (i.e. une sorte de variable globale non-modifiable) par
fichier .cpp incluant le fameux header.
|
Il « crée » ce que tu lui démande, c-à-d une variable const de
type int, sans linkage. Dans les faits, je ne connais aucun
compilateur qui ne l'alloue si on n'en prend pas l'adresse.
| Quote: | Au final, l'étape de link risque d'etre douloureuse!!!!
|
Pourquoi ? C'est un symbol sans linkage, que l'éditeur de liens
ne voit pas.
| Quote: | 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!!!
|
C'est une des irrégularités de C++. Le linkage par défaut d'une
variable à la portée d'un espèce référentiel dépend de ce
qu'elle est const ou non.
| Quote: | - Visual 6.0) n'arrive jamais à linker
|
Chez moi si. Je m'en suis servi pas mal sans problème.
| Quote: | 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")?
|
Le dernier, sans doute. À moins que ce soit un problème suite au
comportement indéfini. Définir NULL, c'est illégal, mais si tu
essaies NUL ou NIL, ça ne doit pas poser de problèmes.
| Quote: | 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!!!
|
Il donnera un résultat indéfini selon la norme. C'est illégal.
| Quote: | Ou alors:
- je peux faire avant ma définition un #undef NULL
- je peux faire mon propre NULL: "const int MYNULL = 0;"
|
Inclure <stddef.h>. C'est la solution standard.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Fri Feb 04, 2005 9:27 am Post subject: Re: const int NULL = 0 |
|
|
On Fri, 4 Feb 2005 06:55:50 +0100, "Ivan Vecerina"
<NOT_VALID_please_use_contact_webform (AT) vecerina (DOT) com>:
| Quote: | Pour ma part, j'utilise tout simplement 00 quand la valeur
représente un pointeur
|
Une notation octale pour un pointeur ?
--
;-)
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Fri Feb 04, 2005 9:30 am Post subject: Re: const int NULL = 0 |
|
|
Gabriel Dos Reis wrote:
| Quote: | Philippe Mesmeur <philippe.mesmeur (AT) noos (DOT) fr> writes:
| 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.
should not happen.
|
Ça dépend. C'est un comportement indéfini selon la norme. Donc,
quoiqu'en fasse le compilateur, il a raison.
Si le nom est NIL, ou NUL, ou quelque chose d'autre, évidemment,
il doit pas y avoir de problème.
| Quote: | | Au final, l'étape de link risque d'etre douloureuse!!!!
Non.
| 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!!!
Oui, et c'est ce que demande C++ depuis très longtemps. C'est
pour ça qu'il a dit
const int NULL = 0;
et non
int NULL = 0;
Chaque mot a son importance.
|
Je crois que l'intérêt principal du const ici, c'est pour qu'on
n'écrive pas NULL = 3 dans une fonction par erreur.
Évidemment, ça serait plus cohérent d'écrire :
static int const toto = 0 ;
pour que le linkage soit apparent.
| Quote: | | - Visual 6.0) n'arrive jamais à linker
Visual 6.0 n'arrive pas à faire beaucoup de choses.
|
Tu t'en es réelement servi, ou tu répètes des maudisances. Je
connais des gens qui font beaucoup avec VC++ 6.0.
En fait, il n'y a pas de problème ici avec VC++.
| Quote: | | 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!!!
Oui. Mais alors peux-tu citer exactement ce qu'il a écrit ?
|
Je serais intéressé aussi. Parce qu'en général, Stroustrup est
assez bien à ne pas présenter des opinions comme des vérités
absolues. Je m'attendrais donc quelque chose du genre
"Personally, I prefer ..." avant un conseil d'utiliser 0 plutôt
que NULL.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Fri Feb 04, 2005 9:37 am Post subject: Re: const int NULL = 0 |
|
|
Ivan Vecerina wrote:
| Quote: | "Philippe Mesmeur" <philippe.mesmeur (AT) noos (DOT) fr> wrote in message
news:4202b6c2$0$4799$79c14f64 (AT) nan-newsreader-05 (DOT) noos.net...
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)
...
- Visual 6.0) n'arrive jamais à linker
Faute à sa non-conformité avec le standard C++.
|
Faute à savoir s'en servir, peut-être. VC++ 6.0 est bien plus
conforme que la plupart de ses contemporains, et traite ce
cas-ci (que la norme n'a pas changé par rapport à l'ARM)
correctement.
(Évidemment, je fais abstraction que le code en question
introduit un comportement indéfini dans le programme, et que
donc, tout ce que peut faire le compilateur est conforme.)
| Quote: | Si une portabilité sur de tels compilateurs est désirable, une
alternative est:
enum { NULL=0 };
|
Aussi illégal (et donc, comportement indéfini).
La norme dit que NULL est un macro. L'utilisateur n'a donc pas
droit de le rédéfinir.
[...]
| Quote: | J'éviterai effectivement tout court d'utiliser l'identifiant
NULL. Cette macro n'apporte rien, et n'est à mon avis pas plus
judicieuse que... disons:
#define IF(x) if(x) {
#define END_IF }
|
Au différence près que c'est du C++ standard. Il y a des
arguments pour et contre -- je crois que le comité travail sur
une solution réele, mais en attendant, utiliser NULL a certains
défauts, utiliser 0 en a d'autres, et on n'a pas réelement
d'autres alternatifs.
| Quote: | Certes, une notation permettant de distinguer 'nul' de 'zéro'
peut avoir des avantages.
Pour ma part, j'utilise tout simplement 00 quand la valeur
représente un pointeur, comme j'écris 0.0 pour une constante
double.
|
Le problème avec celà, c'est que personne d'autre ne le fait.
| Quote: | NULL est purement et simplement sorti de mon vocabulaire, et
c'est l'option que je, modestement, je recommande également.
|
C'est une option possible. J'ai choisi l'autre, mais je
reconnais bien qu'il y a des arguments des deux côtés.
En attendant, si tu veux lire le C++, il faut comprendre les
deux écritures, parce que tu vas les voir.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Fri Feb 04, 2005 10:08 am Post subject: Re: const int NULL = 0 |
|
|
Ivan Vecerina wrote:
| Quote: | J'éviterai effectivement tout court d'utiliser l'identifiant NULL.
Cette macro n'apporte rien [...]
Certes, une notation permettant de distinguer 'nul' de 'zéro'
peut avoir des avantages.
Pour ma part, j'utilise tout simplement 00 quand la valeur
représente un pointeur, comme j'écris 0.0 pour une constante
double. NULL est purement et simplement sorti de mon vocabulaire,
et c'est l'option que je, modestement, je recommande également.
|
Il est vrai que NULL, tel que défini par la Norme, doit être
accepté non seulement comme pointeur, mais aussi dans les
contextes où on attend un entier...
Il n'y cependant rien qui empêche le compilateur d'emettre un
warning si NULL est ainsi abusé - dans le fichier d'en-tête
stddef.h fourni avec gcc, ce macro est défini comme
#define NULL __null
ce qui permet d'avoir un warning du genre "passing NULL used for
non-pointer converting 1 of `void foo(int)'" même dans des cas "piège"
comme
void foo(int);
void foo(void const*);
...
foo(NULL);
Falk
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Fri Feb 04, 2005 2:00 pm Post subject: Re: const int NULL = 0 |
|
|
[email]kanze (AT) gabi-soft (DOT) fr[/email] writes:
| Quote: | Gabriel Dos Reis wrote:
Philippe Mesmeur <philippe.mesmeur (AT) noos (DOT) fr> writes:
| 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.
should not happen.
Ça dépend. C'est un comportement indéfini selon la norme. Donc,
quoiqu'en fasse le compilateur, il a raison.
|
Bof. Si mon programme est
const int NULL = 0;
int main() { return NULL; }
où est le comportement indéfini ?
| Quote: | Si le nom est NIL, ou NUL, ou quelque chose d'autre, évidemment,
il doit pas y avoir de problème.
| Au final, l'étape de link risque d'etre douloureuse!!!!
Non.
| 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!!!
Oui, et c'est ce que demande C++ depuis très longtemps. C'est
pour ça qu'il a dit
const int NULL = 0;
et non
int NULL = 0;
Chaque mot a son importance.
Je crois que l'intérêt principal du const ici, c'est pour qu'on
n'écrive pas NULL = 3 dans une fonction par erreur.
|
C'est que tu n'as pas encore compris « const », mais ce n'est pas
grave. Voir plus bas.
| Quote: | Évidemment, ça serait plus cohérent d'écrire :
static int const toto = 0 ;
pour que le linkage soit apparent.
| - Visual 6.0) n'arrive jamais à linker
Visual 6.0 n'arrive pas à faire beaucoup de choses.
Tu t'en es réelement servi, ou tu répètes des maudisances. Je
connais des gens qui font beaucoup avec VC++ 6.0.
|
oui mais en quoi cela est-il en contradiction avec « n'arrive pas à
faire beaucoup de choses » ?
| Quote: | En fait, il n'y a pas de problème ici avec VC++.
|
Huh.
| Quote: | | 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!!!
Oui. Mais alors peux-tu citer exactement ce qu'il a écrit ?
Je serais intéressé aussi.
|
Tu est fatigant.
http://groups-beta.google.com/group/fr.comp.lang.c++/messages/e3876e147ea41420,ae88d5df21c44df7,ae96d6d557729a52,ffb50bfd02464a9a,f08293fccfc8d97a,9daea3cce0b66b85,1ff90b08d68dfd2a,6865364935c336aa,45d9bbbebdd7e6c4,3cd7a2e539b45d99?thread_id=853999f7d9420178&mode=thread&noheader=1&q=if+you+feel+you+must+group:fr.comp.lang.c%2B%2B#doc_ae88d5df21c44df7
Un certain KANZE James y est abondamment intervenu. Toute
ressemblance est une pure coincidence.
-- Gaby
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Fri Feb 04, 2005 2:04 pm Post subject: Re: const int NULL = 0 |
|
|
[email]kanze (AT) gabi-soft (DOT) fr[/email] writes:
| Quote: | Ivan Vecerina wrote:
"Philippe Mesmeur" <philippe.mesmeur (AT) noos (DOT) fr> wrote in message
news:4202b6c2$0$4799$79c14f64 (AT) nan-newsreader-05 (DOT) noos.net...
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)
...
- Visual 6.0) n'arrive jamais à linker
Faute à sa non-conformité avec le standard C++.
Faute à savoir s'en servir, peut-être. VC++ 6.0 est bien plus
conforme que la plupart de ses contemporains, et traite ce
cas-ci (que la norme n'a pas changé par rapport à l'ARM)
correctement.
|
Chapitres et versets ?
| Quote: | (Évidemment, je fais abstraction que le code en question
introduit un comportement indéfini dans le programme, et que
donc, tout ce que peut faire le compilateur est conforme.)
Si une portabilité sur de tels compilateurs est désirable, une
alternative est:
enum { NULL=0 };
Aussi illégal (et donc, comportement indéfini).
La norme dit que NULL est un macro. L'utilisateur n'a donc pas
droit de le rédéfinir.
|
Uniquement si un entête standard est inclus.
[...]
| Quote: | En attendant, si tu veux lire le C++, il faut comprendre les
deux écritures, parce que tu vas les voir.
|
Woaw. Et en ce qui concerne la sémantique de « const », tu as essayé ?
-- Gaby
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Fri Feb 04, 2005 2:15 pm Post subject: Re: const int NULL = 0 |
|
|
[email]kanze (AT) gabi-soft (DOT) fr[/email] writes:
| Quote: | Il indique également pour ceux qui voudraient continuer à
utiliser NULL d'en faire la déclaration suivante:
const int NULL = 0;
C'est illégal, au moins si tu inclus le moindre en-tête. Ne le
fais pas, en aucun cas.
|
C'est invalide seulement s'il inclut un en-tête standard. Mais s'il
n'en inclut pas ?
À lire le message de Philippe, il s'intérroge, entre autres, sur
d'éventuels problèmes de liaison posés par quelque chose comme
const int foo = 0;
dans un fichier d'en-tête qu'on inclut dans différents fichiers
d'implémentation faisant partie d'un programme.
Dans son message, foo était NULL mais la phrase clé en ce qui concerne
le problème de liaison est :
# 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!!!!
| Quote: | Si tu veux utiliser NULL, il n'y a qu'une seule façon de
l'avoir :
#include <stddef.h
(OK, il y en a plusieurs, parce qu'à la place de
peux utiliser <cstddef>, <stdlib.h>, <stdio.h>, ...)
NULL fait partie de la norme. C'est du C++ standard. Tu n'as pas
le droit de le définir toi-même.
|
Puisque tu es distrait par NULL, s/NULL/foo/ et recommence.
[...]
| Quote: | (i.e. une sorte de variable globale non-modifiable) par
fichier .cpp incluant le fameux header.
Il « crée » ce que tu lui démande, c-à-d une variable const de
type int, sans linkage.
|
chapitres et versets ?
-- Gaby
|
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Fri Feb 04, 2005 3:11 pm Post subject: Re: const int NULL = 0 |
|
|
Gabriel Dos Reis wrote:
| Quote: | kanze (AT) gabi-soft (DOT) fr writes:
| Ça dépend. C'est un comportement indéfini selon la norme. Donc,
| quoiqu'en fasse le compilateur, il a raison.
Bof. Si mon programme est
const int NULL = 0;
int main() { return NULL; }
où est le comportement indéfini ?
|
Dès qu'on inclut <cstddef> ou <stddef.h>,
ou une autre en-tête qui inclut une de ces
2, directement ou indirectement (ce qui
peut être le cas pour n'importe quelle
en-tête standard, si mes souvenirs sont bons)...
Pour éviter un comportement indéfini en la présence
d'un identificateur NULL fourni par l'utilisateur, il
faudrait donc ne pas inclure d'en-têtes standard - ce
qui limite quelque peu ce qu'on peut faire dans son
programme (il est vrai qu'on peut implémenter les
utilitaires Unix 'true' et 'false' [voir
<http://www.miketaylor.org.uk/tech/oreilly/truenut.html>]
sans inclure d'en-têtes standard, mais à part de ça...)
Falk
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Fri Feb 04, 2005 4:17 pm Post subject: Re: const int NULL = 0 |
|
|
Falk Tannhäuser <falk.tannhauser (AT) crf (DOT) canon.fr> writes:
| Quote: | Gabriel Dos Reis wrote:
[email]kanze (AT) gabi-soft (DOT) fr[/email] writes:
| Ça dépend. C'est un comportement indéfini selon la norme. Donc,
| quoiqu'en fasse le compilateur, il a raison.
Bof. Si mon programme est const int NULL = 0;
int main() { return NULL; }
où est le comportement indéfini ?
Dès qu'on inclut <cstddef> ou <stddef.h>,
ou une autre en-tête qui inclut une de ces
2, directement ou indirectement (ce qui
peut être le cas pour n'importe quelle
en-tête standard, si mes souvenirs sont bons)...
|
Je suis au courant de tout ça (comme tu pourrais le constater dans
plusieurs de mes messages) et comme tu as pu le voir, le programme
que j'ai présenté n'inclus rien de ça. Alors ?
Hint : la question contenait sa réponse.
-- Gaby
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|