Correct façon de définir la valeur NULL et NULL_POINTER?
Autant que je sache, C définit NULL
comme ceci:
#define NULL ( (void *) 0)
Alors, comment devrions-nous définir NULL_POINTER
? J'ai défini de la même dans mon programme, et cela a fonctionné, mais je suppose que c'est juste une coïncidence:
#define NULL_POINTER ( (void *) 0)
Quelle serait la définition logique, si ?
NULL
un pointeur null, pourquoi voulez-vous séparé de définir pour qui?Vous devez laisser la définition de la mise en œuvre. Définir votre propre version de NULLE ne peut que faire empirer les choses.
OriginalL'auteur Niklas Rosencrantz | 2013-09-13
Vous devez vous connecter pour publier un commentaire.
et
sont tous les deux valides. Si vous avez besoin pour mettre en œuvre votre propre macro pour pointeur null, la même règle s'applique.
La première définition me semble mieux car dans certains compilateurs de la comparaison d'une valeur numérique à NULL résultats dans un avertissement (par exemple, "[Avertissement] la comparaison entre pointeur et entier"), tandis que la deuxième définition qui ne fonctionne pas. Ainsi, la première définition permet de mieux la sémantique.
OriginalL'auteur Yu Hao
C'est seulement dans le pointeur de contextes qui
NULL
et0
sont équivalentes.NULL
ne doit pas être utilisé lorsqu'un autre type de0
est nécessaire, même si cela pourrait fonctionner, car cela envoie le mauvais stylistique message. (En outre, ANSI permet la définition deNULL
être((void *)0)
, ne fonctionne pas à tous les non-pointeur de contextes.) En particulier, ne pas utiliser deNULL
lorsque l'ASCII caractère nul (NUL) est souhaitée. Fournir votre propre définitionNULL
doit seulement être utilisé comme un pointeur constant.OriginalL'auteur Dayal rai