Many of the standard headers define NULL, and it is described, for example, in section 7.17 Common definitions (pdf page 266): NULL which expands to an implementation-defined null pointer constant and "null pointer constant" is described in section 6.3.2.3 Pointers (pdf page 59): 3 An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant (55). If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function. --- 55) The macro NULL is defined in (and other headers) as a null pointer constant; see 7.17. On Linux systems, the standard C headers include other non-standard Unix-specific headers, like /usr/include/linux/stddef.h which defines NULL: #ifndef _LINUX_STDDEF_H #define _LINUX_STDDEF_H #undef NULL #if defined(__cplusplus) #define NULL 0 #else #define NULL ((void *)0) #endif #endif