à propos de la façon de tester la nullité d'un pointeur

winamp Messages postés 2 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 19 janvier 2005 - 17 janv. 2005 à 18:47
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 - 19 janv. 2005 à 17:26
Bonjour à tous.

J'ai remarqué dans plusieurs codes, ainsi que dans certaines manuels de programmation, qu'il était préférable de tester si un pointeur est nul avec les instructions :
if (NULL!=pToto) ...

plutôt qu'avec :
if (pToto!=NULL) ...

, sans toutefois parvenir à trouver une explication satisfaisante.

Quelqu'un saurait-il me répondre svp ?

Merci.

Laurent

7 réponses

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
17 janv. 2005 à 19:07
Bonjour,

C'est exactement la même chose. Question d'écriture c'est tout.

@+
Arnotic,
Admin CS, MVP Visual C++
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
17 janv. 2005 à 19:07
Perso, je ne vois pas trop l'intérêt, mais peut-être parce qu'un
pointeur NULL renvoie NULL alors que NULL n'est pas vraiment une
constante... Toujours est-il que if (pToto!=NULL) marche très bien !

DarK Sidious
________________________________________________________
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 janv. 2005 à 20:34
Un pointeur ne renvoie rien, il vaut 0 ou non et rien de plus.

ciao...
BruNews, MVP VC++
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
18 janv. 2005 à 13:26
Pensez vous qu'il faut caster le NULL pour qu'il soit du meme type que la variable ?

FILE* F = (FILE)NULL;

Certains disent que c'est une question de normes.

[mailto:D@runia D@runia]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 janv. 2005 à 13:51
Aucun besoin, un pointeur est une valeur numerique (qui reference une adresse), donc aucun besoin de cast pour lui attribuer un 0.

ciao...
BruNews, MVP VC++
0
winamp Messages postés 2 Date d'inscription mardi 24 août 2004 Statut Membre Dernière intervention 19 janvier 2005
19 janv. 2005 à 13:59
merci de vos réponses !

je crois me rappeler qu'il s'agit en fait plus d'une précaution afin d'éviter je ne sais quelle erreur de syntaxe ou de frappe, plus que d'une réelle mesure destinée à éviter une erreur d'éxécution du code... la question reste ouverte!
0
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
19 janv. 2005 à 17:26
Selon le standart C99 :


Attention toutefois avec la valeur NULL dans ce cas. En effet, NULL n'est pas n'ecessairement une valeur du type pointeur mais une valeur qui donne un pointeur nul si elle est affect'ee ou pass'ee ou compar'ee `a un type pointeur. Le passage d'une valeur `a un param`etre n'est pas une affectation `a un pointeur mais une affectation qui ob'eit aux lois sp'eciales pour les param`etres `a nombre variable (ou pour les param`etres d'une fonction sans prototype). Les lois de promotion pour les types arithm'etiques sont appliqu'ees). Si NULL est d'efini par
#define NULL 0 alors (int)0 est pass'e `a la fonction. Si un pointeur n'a pas la m^eme taille qu'un int ou si un pointeur nul n'est pas repr'esent'e par o"" tous les bits 0 r' le passage d'un 0 ne passe donc pas de pointeur nul. La m'ethode portable est donc
f(toto,titi,(void*)NULL);
ou f(toto,titi,(void*)0);
C'est le seul cas o`u il faut caster NULL parce qu'il ne s'agit pas d'un contexte syntactique o"" de pointeur r', seulement d'un contexte o"" de pointeur par contrat r'.





D@runia
0
Rejoignez-nous