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

Signaler
Messages postés
2
Date d'inscription
mardi 24 août 2004
Statut
Membre
Dernière intervention
19 janvier 2005
-
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
-
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

Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Bonjour,

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

@+
Arnotic,
Admin CS, MVP Visual C++
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
118
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
________________________________________________________
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Un pointeur ne renvoie rien, il vaut 0 ou non et rien de plus.

ciao...
BruNews, MVP VC++
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
1
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]
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
2
Date d'inscription
mardi 24 août 2004
Statut
Membre
Dernière intervention
19 janvier 2005

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!
Messages postés
354
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
1
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