Façon correcte de définir NULL et NULL_POINTER?

Autant que je sache, C définit NULL comme ceci:

 #define NULL ( (void *) 0) 

Ensuite, comment devrions-nous définir NULL_POINTER ? Je l’ai défini de la même manière dans mon programme et cela a fonctionné, mais je suppose que ce n’est qu’une coïncidence:

 #define NULL_POINTER ( (void *) 0) 

Quelle serait la définition logique, le cas échéant?

 #define NULL ( (void *) 0) 

et

 #define NULL 0 

sont tous les deux valables. Si vous devez implémenter votre propre macro pour le pointeur null, la même règle s’applique.

C11 (ISO / IEC 9899: 201x) §6.3.2.3 Pointeurs Section 3

Une expression constante entière avec la valeur 0 , ou une telle expression convertie dans le type void * , est appelée constante de pointeur null

Ce n’est que dans les contextes de pointeur que NULL et 0 sont équivalents. NULL ne doit pas être utilisé lorsqu’un autre type de 0 est requirejs, même si cela peut fonctionner, car cela envoie un message stylistique erroné. (En outre, ANSI autorise la définition de NULL comme étant ((void *)0) , ce qui ne fonctionnera pas du tout dans des contextes sans pointeur.) En particulier, n’utilisez pas NULL lorsque le caractère nul ASCII (NUL) est souhaité. Fournissez votre propre définition

 #define NUL '\0' 

NULL doit être utilisé uniquement comme constante de pointeur.