As far as I know, C defines NULL
like this:
#define NULL ( (void *) 0)
Then, how should we define NULL_
#define NULL ( (void *) 0)
and
#define NULL 0
are both valid. If you need to implement your own macro for null pointer, the same rule applies.
C11(ISO/IEC 9899:201x) §6.3.2.3 Pointers Section 3
An integer constant expression with the value
0
, or such an expression cast to typevoid *
, is called a null pointer constant
It is only in pointer contexts that NULL
and 0
are equivalent. NULL
should not be used when another kind of 0
is required, even though it might work, because doing so sends the wrong stylistic message. (Furthermore, ANSI allows the definition of NULL
to be ((void *)0)
, which will not work at all in non-pointer contexts.) In particular, do not use NULL
when the ASCII null character (NUL) is desired. Provide your own definition
#define NUL '\0'
NULL
should be used only as a pointer constant.