à propos de la façon de tester la nullité d'un pointeur
winamp
Messages postés2Date d'inscriptionmardi 24 août 2004StatutMembreDernière intervention19 janvier 2005
-
17 janv. 2005 à 18:47
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 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
A voir également:
à propos de la façon de tester la nullité d'un pointeur
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 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
________________________________________________________
winamp
Messages postés2Date d'inscriptionmardi 24 août 2004StatutMembreDernière intervention19 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!
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 20112 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'.