Namespaces
Variants

NULL

From cppreference.net
< c ‎ | types
Défini dans l'en-tête <locale.h>
Défini dans l'en-tête <stddef.h>
Défini dans l'en-tête <stdio.h>
Défini dans l'en-tête <stdlib.h>
Défini dans l'en-tête <string.h>
Défini dans l'en-tête <time.h>
Défini dans l'en-tête <wchar.h>
#define NULL /*implementation-defined*/

La macro NULL est une constante de pointeur nul définie par l'implémentation, qui peut être

(depuis C23)

Une constante de pointeur nul peut être convertie en n'importe quel type de pointeur ; une telle conversion donne la valeur de pointeur nul de ce type.

Table des matières

Notes

POSIX exige NULL d'être défini comme une expression constante entière avec la valeur 0 castée en void * .

Implémentation possible

// Compatible C++ :
#define NULL 0
// Incompatible C++ :
#define NULL (10*2 - 20)
#define NULL ((void*)0)
// depuis C23 (compatible avec C++11 et ultérieur)
#define NULL nullptr

Exemple

#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    // tout type de pointeur peut être défini à 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);
    // de nombreuses fonctions retournant des pointeurs utilisent les pointeurs nuls pour indiquer une erreur
    char *ptr = malloc(0xFULL);
    if (ptr == NULL)
        printf("Mémoire insuffisante");
    else
        printf("ptr = %#" PRIxPTR"\n", (uintptr_t)ptr);
    free(ptr);
}

Sortie possible :

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

Voir aussi

le type de la constante de pointeur nul prédéfinie nullptr
(typedef)