OVH Cloud OVH Cloud

return null;

16 réponses
Avatar
Bernard Bandiera
Bonsoir.

Vu dans un programme, aujourd'hui :

void mafonction()
{
....
return null;
}

Est-ce équivalent à return; ? Et est-ce bien orthodoxe ?

Merci de satisfaire ma curiosité.

--
Bernard

Gloire à qui, n'ayant pas d'idéal sacro-saint
Se borne à ne pas trop emmerder son voisin
Georges Brassens - Don Juan

6 réponses

1 2
Avatar
AG
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 ?


Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', AG 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


Et en fonction de quoi choisi-t-on l'une plutot que l'autre ?


Ce n'est pas l'utilisateur (le programmeur) qui décide (il se contente
d'utiliser la macro NULL). C'est l'implémenteur (celui qui écrit le
compilateur et qui fourni les headers qui vont avec).

--
-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/



Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Jean-Marc Bourguet wrote:

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.


Je ne vois pas ce qu'il y a de classique. La norme dit que NULL supporte deux
implémentations :

#define NULL 0
et
#define NULL ((void*)0)

Et utilise parfois pour d'autre
choses que des pointeurs.


Certainement pas. NULL n'a un sens que dans le strict contexte 'pointeur'. Si
celui-ci n'est pas explicite, il faut un cast.

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.


Oui. Mais c'est parce que dans le cas des fonctons variadics, le type n'est
pas explicite. Il faut donc 'forcer' (caster) en (void*).

--
-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/




Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "manu l." wrote:


<définition de NULL>

De plus, elle est d'après la norme, définie dans <stddef.h>


Dans <locale.h>, <stddef.h>, <stdio.h>, <stdlib.h>, <string.h> et <time.h>


La norme n'impose que <stddef.h>. Les implémentations peuvent faire plus si
elles le juge nécessaire...

--
-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/


Avatar
Jean-Marc Bourguet
Emmanuel Delahaye writes:

In 'fr.comp.lang.c', Jean-Marc Bourguet wrote:

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.


Je ne vois pas ce qu'il y a de classique.


J'entendais avant la norme (de 89 si tu veux etre sur).

Et utilise parfois pour d'autre choses que des pointeurs.


Certainement pas. NULL n'a un sens que dans le strict contexte
'pointeur'. Si celui-ci n'est pas explicite, il faut un cast.


Quelle quantite de code d'avant 89 as-tu manipule?

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





Avatar
manu l.
"Emmanuel Delahaye" a écrit dans le message de
news:
In 'fr.comp.lang.c', "manu l." wrote:


<définition de NULL>

De plus, elle est d'après la norme, définie dans <stddef.h>


Dans <locale.h>, <stddef.h>, <stdio.h>, <stdlib.h>, <string.h> et
<time.h>



La norme n'impose que <stddef.h>. Les implémentations peuvent faire plus
si

elles le juge nécessaire...


Et tu peux faire mieux, si tu le juges nécessaire :

"7.4 Localisation <locale.h>

(...) Les macros définies sont NULL (...)"

(C90)

Et je passe les autres.

Meilleures salutations.

--
manu l.


--
-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/




1 2