C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

const int NULL = 0
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Philippe Mesmeur
Guest





PostPosted: Thu Feb 03, 2005 11:41 pm    Post subject: const int NULL = 0 Reply with 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.

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





PostPosted: Fri Feb 04, 2005 3:38 am    Post subject: Re: const int NULL = 0 Reply with quote



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





PostPosted: Fri Feb 04, 2005 5:55 am    Post subject: Re: const int NULL = 0 Reply with quote



"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





PostPosted: Fri Feb 04, 2005 8:35 am    Post subject: Re: const int NULL = 0 Reply with quote

Quote:
NULL est purement et simplement sorti de mon vocabulaire,

Pourquoi ? NULL ne vaut-il pas zero ?

PurL



Back to top
Frederic Py
Guest





PostPosted: Fri Feb 04, 2005 9:19 am    Post subject: Re: const int NULL = 0 Reply with quote

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

Quote:

PurL


--
Fred


Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Fri Feb 04, 2005 9:21 am    Post subject: Re: const int NULL = 0 Reply with quote

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





PostPosted: Fri Feb 04, 2005 9:27 am    Post subject: Re: const int NULL = 0 Reply with quote

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





PostPosted: Fri Feb 04, 2005 9:30 am    Post subject: Re: const int NULL = 0 Reply with quote

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





PostPosted: Fri Feb 04, 2005 9:37 am    Post subject: Re: const int NULL = 0 Reply with quote

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





PostPosted: Fri Feb 04, 2005 10:08 am    Post subject: Re: const int NULL = 0 Reply with quote

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





PostPosted: Fri Feb 04, 2005 2:00 pm    Post subject: Re: const int NULL = 0 Reply with quote

[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





PostPosted: Fri Feb 04, 2005 2:04 pm    Post subject: Re: const int NULL = 0 Reply with quote

[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





PostPosted: Fri Feb 04, 2005 2:15 pm    Post subject: Re: const int NULL = 0 Reply with quote

[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





PostPosted: Fri Feb 04, 2005 3:11 pm    Post subject: Re: const int NULL = 0 Reply with quote

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





PostPosted: Fri Feb 04, 2005 4:17 pm    Post subject: Re: const int NULL = 0 Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.