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.