NULL - cppreference.com (original) (raw)

| Defined in header <locale.h> | | | | -------------------------------------------------------------------- | | | | Defined in header <stddef.h> | | | | Defined in header <stdio.h> | | | | Defined in header <stdlib.h> | | | | Defined in header <string.h> | | | | Defined in header <time.h> | | | | Defined in header <wchar.h> | | | | #define NULL /*implementation-defined*/ | | |

The macro NULL is an implementation-defined null pointer constant, which may be

predefined constant nullptr (since C23)

A null pointer constant may be converted to any pointer type; such conversion results in the null pointer value of that type.

[edit] Notes

POSIX requires NULL to be defined as an integer constant expression with the value ​0​ cast to void*.

[edit] Possible implementation

// C++ compatible: #define NULL 0 // C++ incompatible: #define NULL (102 - 20) #define NULL ((void)0) // since C23 (compatible with C++11 and later) #define NULL nullptr

[edit] Example

#include <inttypes.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h>   int main(void) { // any kind of pointer can be set to NULL int* p = NULL; struct S s = NULL; void(f)(int, double) = NULL; printf("%p %p %p\n", (void)p, (void)s, (void*)(long)f);   // many pointer-returning functions use null pointers to indicate error char *ptr = malloc(0xFULL); if (ptr == NULL) printf("Out of memory"); else printf("ptr = %#" PRIxPTR"\n", (uintptr_t)ptr); free(ptr); }

Possible output:

(nil) (nil) (nil) ptr = 0xc001cafe

[edit] See also