NULL
From cppreference.net
|
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
- une expression constante entière avec la valeur 0
- une expression constante entière avec la valeur 0 convertie en type void *
|
(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
Exécuter ce code
#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
|
(C23)
|
le type de la constante de pointeur nul prédéfinie
nullptr
(typedef) |
|
Documentation C++
pour
NULL
|
|