pointer c pointers null c-preprocessor

c - null pointer en java



¿Forma correcta de definir NULL y NULL_POINTER? (2)

Por lo que sé, C define NULL así:

#define NULL ( (void *) 0)

Entonces, ¿cómo deberíamos definir NULL_POINTER ? Lo definí de la misma manera en mi programa y funcionó, pero supongo que es solo una coincidencia:

#define NULL_POINTER ( (void *) 0)

¿Cuál sería la definición lógica, si hay alguna?


Es solo en contextos de puntero que NULL y 0 son equivalentes. NULL no se debe usar cuando se requiere otro tipo de 0 , aunque podría funcionar, porque al hacerlo envía un mensaje de estilo incorrecto. (Además, ANSI permite que la definición de NULL sea ((void *)0) , lo que no funcionará en absoluto en contextos que no sean punteros.) En particular, no use NULL cuando se desee el carácter nulo ASCII (NUL). Proporcione su propia definición

#define NUL ''/0''

NULL debe usarse solo como una constante de puntero.


#define NULL ( (void *) 0)

y

#define NULL 0

son ambos validos Si necesita implementar su propia macro para el puntero nulo, se aplica la misma regla.

C11 (ISO / IEC 9899: 201x) §6.3.2.3 Punteros Sección 3

Una expresión constante entera con el valor 0 , o una expresión de este tipo para escribir void * , se llama constante de puntero nulo