Donc, in fine, ça revient à faire return (void *) 0; J'ai fait un p'tit test, mon compilo (VC++) me donne un warning (c'est bien la moindre des choses !) Mais comme souvent bien des gens ne regardent pas les warnings (à mon avis, ils ont bien tort mais bon).
Du coup, j'ai une autre question : ce que j'ai trouvé dans stdio.h, c'est tout à fait standard, ou c'est une extension de certains compilos ? (je l'ai trouvé aussi avec dev-C++, mais dans stddef.h, qui est lui-même inclus dans stdio.h)
Merci ! -- Bernard
Gloire à qui, n'ayant pas d'idéal sacro-saint Se borne à ne pas trop emmerder son voisin Georges Brassens - Don Juan
Yves ROMAN écrivait dans le message news:3F72A104.395FA54A@unilog.fr :
Ca n'est pas normal si c'est NULL et non null
Curieusement sur VC++ ca ne donne qu'un Warning avec NULL !
ca ne serait pas plutot :
void* mafonction()
{
....
return NULL ;
}
Bien, vu, c'était bien NULL et non pas null
Entretemps, j'ai un peu fouillé et j'ai trouvé ça dans le fichier d'en-tête
stdio.h (de VC++) :
Donc, in fine, ça revient à faire return (void *) 0;
J'ai fait un p'tit test, mon compilo (VC++) me donne un warning (c'est bien
la moindre des choses !) Mais comme souvent bien des gens ne regardent pas
les warnings (à mon avis, ils ont bien tort mais bon).
Du coup, j'ai une autre question : ce que j'ai trouvé dans stdio.h, c'est
tout à fait standard, ou c'est une extension de certains compilos ? (je l'ai
trouvé aussi avec dev-C++, mais dans stddef.h, qui est lui-même inclus dans
stdio.h)
Merci !
--
Bernard
Gloire à qui, n'ayant pas d'idéal sacro-saint
Se borne à ne pas trop emmerder son voisin
Georges Brassens - Don Juan
Donc, in fine, ça revient à faire return (void *) 0; J'ai fait un p'tit test, mon compilo (VC++) me donne un warning (c'est bien la moindre des choses !) Mais comme souvent bien des gens ne regardent pas les warnings (à mon avis, ils ont bien tort mais bon).
Du coup, j'ai une autre question : ce que j'ai trouvé dans stdio.h, c'est tout à fait standard, ou c'est une extension de certains compilos ? (je l'ai trouvé aussi avec dev-C++, mais dans stddef.h, qui est lui-même inclus dans stdio.h)
Merci ! -- Bernard
Gloire à qui, n'ayant pas d'idéal sacro-saint Se borne à ne pas trop emmerder son voisin Georges Brassens - Don Juan
Anthony Fleury
"Bernard Bandiera" a écrit dans le message news: bkv9ie$hkp$
Entretemps, j'ai un peu fouillé et j'ai trouvé ça dans le fichier d'en-tête
Du coup, j'ai une autre question : ce que j'ai trouvé dans stdio.h, c'est tout à fait standard, ou c'est une extension de certains compilos ? (je l'ai
trouvé aussi avec dev-C++, mais dans stddef.h, qui est lui-même inclus dans
stdio.h)
NULL est défini par la norme du C. C'est défini comme étant un pointeur constant sur une adresse invalide si je ne me trompe pas! (J'ai pas la norme sous la main pour vérifier) Sa valeur ( (void*) 0 est une spécificité de ton implémentation par contre.
De plus, elle est d'après la norme, définie dans <stddef.h>
-- Anthony
"Bernard Bandiera" <personne@poste.restante> a écrit dans le message news:
bkv9ie$hkp$1@news-reader5.wanadoo.fr...
Entretemps, j'ai un peu fouillé et j'ai trouvé ça dans le fichier
d'en-tête
Du coup, j'ai une autre question : ce que j'ai trouvé dans stdio.h, c'est
tout à fait standard, ou c'est une extension de certains compilos ? (je
l'ai
trouvé aussi avec dev-C++, mais dans stddef.h, qui est lui-même inclus
dans
stdio.h)
NULL est défini par la norme du C. C'est défini comme étant un pointeur
constant sur une adresse invalide si je ne me trompe pas! (J'ai pas la norme
sous la main pour vérifier) Sa valeur ( (void*) 0 est une spécificité de ton
implémentation par contre.
De plus, elle est d'après la norme, définie dans <stddef.h>
Du coup, j'ai une autre question : ce que j'ai trouvé dans stdio.h, c'est tout à fait standard, ou c'est une extension de certains compilos ? (je l'ai
trouvé aussi avec dev-C++, mais dans stddef.h, qui est lui-même inclus dans
stdio.h)
NULL est défini par la norme du C. C'est défini comme étant un pointeur constant sur une adresse invalide si je ne me trompe pas! (J'ai pas la norme sous la main pour vérifier) Sa valeur ( (void*) 0 est une spécificité de ton implémentation par contre.
De plus, elle est d'après la norme, définie dans <stddef.h>
-- Anthony
Emmanuel Delahaye
In 'fr.comp.lang.c', "Bernard Bandiera" wrote:
Bien, vu, c'était bien NULL et non pas null Entretemps, j'ai un peu fouillé et j'ai trouvé ça dans le fichier d'en-tête stdio.h (de VC++) :
En principe, on ne doit pas regarder ce qui se trouve dans les entête d'une implémentation... Ce qui s'y trouve pourrait très bien ne pas être du C du tout...
Donc, in fine, ça revient à faire return (void *) 0;
Ce qui est une erreur, vu que ta fonction est définie ne retournant rien (void).
J'ai fait un p'tit test, mon compilo (VC++) me donne un warning (c'est bien la moindre des choses !) Mais comme souvent bien des gens ne regardent pas les warnings (à mon avis, ils ont bien tort mais bon).
Ok, pour le warning. Il y a toujours des gens qui aiment se tirer une balle dans le pied. Ils ne durent pas très longtemps...
Du coup, j'ai une autre question : ce que j'ai trouvé dans stdio.h, c'est tout à fait standard, ou c'est une extension de certains compilos
C'est une des façons standards de définir le pointeur constant nul (dit NULL).
? (je l'ai trouvé aussi avec dev-C++, mais dans stddef.h, qui est lui-même inclus dans stdio.h)
En principe, effectivement, la définition de NULL est censée se trouver dans <stddef.h>
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', "Bernard Bandiera" <personne@poste.restante> wrote:
Bien, vu, c'était bien NULL et non pas null
Entretemps, j'ai un peu fouillé et j'ai trouvé ça dans le fichier
d'en-tête stdio.h (de VC++) :
En principe, on ne doit pas regarder ce qui se trouve dans les entête d'une
implémentation... Ce qui s'y trouve pourrait très bien ne pas être du C du
tout...
Donc, in fine, ça revient à faire return (void *) 0;
Ce qui est une erreur, vu que ta fonction est définie ne retournant rien
(void).
J'ai fait un p'tit test, mon compilo (VC++) me donne un warning (c'est
bien la moindre des choses !) Mais comme souvent bien des gens ne
regardent pas les warnings (à mon avis, ils ont bien tort mais bon).
Ok, pour le warning. Il y a toujours des gens qui aiment se tirer une balle
dans le pied. Ils ne durent pas très longtemps...
Du coup, j'ai une autre question : ce que j'ai trouvé dans stdio.h,
c'est tout à fait standard, ou c'est une extension de certains compilos
C'est une des façons standards de définir le pointeur constant nul (dit
NULL).
? (je l'ai trouvé aussi avec dev-C++, mais dans stddef.h, qui est
lui-même inclus dans stdio.h)
En principe, effectivement, la définition de NULL est censée se trouver dans
<stddef.h>
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Bien, vu, c'était bien NULL et non pas null Entretemps, j'ai un peu fouillé et j'ai trouvé ça dans le fichier d'en-tête stdio.h (de VC++) :
En principe, on ne doit pas regarder ce qui se trouve dans les entête d'une implémentation... Ce qui s'y trouve pourrait très bien ne pas être du C du tout...
Donc, in fine, ça revient à faire return (void *) 0;
Ce qui est une erreur, vu que ta fonction est définie ne retournant rien (void).
J'ai fait un p'tit test, mon compilo (VC++) me donne un warning (c'est bien la moindre des choses !) Mais comme souvent bien des gens ne regardent pas les warnings (à mon avis, ils ont bien tort mais bon).
Ok, pour le warning. Il y a toujours des gens qui aiment se tirer une balle dans le pied. Ils ne durent pas très longtemps...
Du coup, j'ai une autre question : ce que j'ai trouvé dans stdio.h, c'est tout à fait standard, ou c'est une extension de certains compilos
C'est une des façons standards de définir le pointeur constant nul (dit NULL).
? (je l'ai trouvé aussi avec dev-C++, mais dans stddef.h, qui est lui-même inclus dans stdio.h)
En principe, effectivement, la définition de NULL est censée se trouver dans <stddef.h>
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Emmanuel Delahaye
In 'fr.comp.lang.c', "Anthony Fleury" wrote:
NULL est défini par la norme du C. <...> Sa valeur ( (void*) 0 est une spécificité de ton implémentation par contre.
Non. C'est une des façons standard de définir NULL. L'autre étant
#define NULL 0
Ce qui est une spécificité de l'implémentation, c'est la manière dont NULL (ou 0) est traduit dans le contexte d'un pointeur. Ca peut être une valeur immédiate genre 0 ou $80000000 ou n'importe quoi d'autre susceptible d'être interprété par l'architecture (CPU, MMU et.)
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', "Anthony Fleury"
<fleury_anthony@a_enlever.hotmail.com> wrote:
NULL est défini par la norme du C. <...> Sa valeur ( (void*) 0 est une
spécificité de ton implémentation par contre.
Non. C'est une des façons standard de définir NULL. L'autre étant
#define NULL 0
Ce qui est une spécificité de l'implémentation, c'est la manière dont NULL
(ou 0) est traduit dans le contexte d'un pointeur. Ca peut être une valeur
immédiate genre 0 ou $80000000 ou n'importe quoi d'autre susceptible d'être
interprété par l'architecture (CPU, MMU et.)
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
NULL est défini par la norme du C. <...> Sa valeur ( (void*) 0 est une spécificité de ton implémentation par contre.
Non. C'est une des façons standard de définir NULL. L'autre étant
#define NULL 0
Ce qui est une spécificité de l'implémentation, c'est la manière dont NULL (ou 0) est traduit dans le contexte d'un pointeur. Ca peut être une valeur immédiate genre 0 ou $80000000 ou n'importe quoi d'autre susceptible d'être interprété par l'architecture (CPU, MMU et.)
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
manu l.
"Anthony Fleury" a écrit dans le message de news:bkvfun$atl$
"Bernard Bandiera" a écrit dans le message news: bkv9ie$hkp$
Entretemps, j'ai un peu fouillé et j'ai trouvé ça dans le fichier d'en-tête
Curieusement sur VC++ ca ne donne qu'un Warning avec NULL !
ca ne serait pas plutot :
void* mafonction() { .... return NULL ; } Bien, vu, c'était bien NULL et non pas null
et c'etait bien void mafonction et non void* mafonction ?
Jean-Marc Bourguet
AG writes:
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', "Anthony Fleury"
NULL est défini par la norme du C. <...> Sa valeur ( (void*) 0 est une spécificité de ton implémentation par contre. Non. C'est une des façons standard de définir NULL. L'autre étant
#define NULL 0
Et en fonction de quoi choisi-t-on l'une plutot que l'autre ?
Classiquement, NULL etait defini a 0. Et utilise parfois pour d'autre choses que des pointeurs.
Ca pose des problemes sur les machines ou sizeof(int) != sizeof(void*) quand on passe des pointeurs a des fonctions sans prototypes (cas moins frequent de nos jours) ou ayant un nombre variable de parametres (cas toujours existant) car il faut caster NULL en (void*) pour que le passage se fasse correctement -- erreur generalement indetectable sur les autres architectures.
Comme le code ayant ce probleme etait courant, les compilateurs 16 bits pour DOS se sont mis a definir NULL a (void*)0, usage qui a ete autorise par la norme C (mais pas impose, ce qui fait que c'est un usage qui n'aide pas vraiment la portabilite: il faut toujours utiliser (void*)NULL pour passer des parametres quand le compilateur n'en connait pas le type) mais interdit en C++ (ou utiliser (void*)0 pour NULL imposerait un cast quand le type destination est connu).
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
AG <AG@tb.fr> writes:
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', "Anthony Fleury"
NULL est défini par la norme du C. <...> Sa valeur ( (void*) 0 est une
spécificité de ton implémentation par contre.
Non. C'est une des façons standard de définir NULL. L'autre étant
#define NULL 0
Et en fonction de quoi choisi-t-on l'une plutot que l'autre ?
Classiquement, NULL etait defini a 0. Et utilise parfois pour d'autre
choses que des pointeurs.
Ca pose des problemes sur les machines ou sizeof(int) != sizeof(void*)
quand on passe des pointeurs a des fonctions sans prototypes (cas
moins frequent de nos jours) ou ayant un nombre variable de parametres
(cas toujours existant) car il faut caster NULL en (void*) pour que le
passage se fasse correctement -- erreur generalement indetectable sur
les autres architectures.
Comme le code ayant ce probleme etait courant, les compilateurs 16
bits pour DOS se sont mis a definir NULL a (void*)0, usage qui a ete
autorise par la norme C (mais pas impose, ce qui fait que c'est un
usage qui n'aide pas vraiment la portabilite: il faut toujours
utiliser (void*)NULL pour passer des parametres quand le compilateur
n'en connait pas le type) mais interdit en C++ (ou utiliser (void*)0
pour NULL imposerait un cast quand le type destination est connu).
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
NULL est défini par la norme du C. <...> Sa valeur ( (void*) 0 est une spécificité de ton implémentation par contre. Non. C'est une des façons standard de définir NULL. L'autre étant
#define NULL 0
Et en fonction de quoi choisi-t-on l'une plutot que l'autre ?
Classiquement, NULL etait defini a 0. Et utilise parfois pour d'autre choses que des pointeurs.
Ca pose des problemes sur les machines ou sizeof(int) != sizeof(void*) quand on passe des pointeurs a des fonctions sans prototypes (cas moins frequent de nos jours) ou ayant un nombre variable de parametres (cas toujours existant) car il faut caster NULL en (void*) pour que le passage se fasse correctement -- erreur generalement indetectable sur les autres architectures.
Comme le code ayant ce probleme etait courant, les compilateurs 16 bits pour DOS se sont mis a definir NULL a (void*)0, usage qui a ete autorise par la norme C (mais pas impose, ce qui fait que c'est un usage qui n'aide pas vraiment la portabilite: il faut toujours utiliser (void*)NULL pour passer des parametres quand le compilateur n'en connait pas le type) mais interdit en C++ (ou utiliser (void*)0 pour NULL imposerait un cast quand le type destination est connu).
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org