NULL
From cppreference.net
|
Definido en el encabezado
<locale.h>
|
||
|
Definido en el encabezado
<stddef.h>
|
||
|
Definido en el encabezado
<stdio.h>
|
||
|
Definido en el encabezado
<stdlib.h>
|
||
|
Definido en el encabezado
<string.h>
|
||
|
Definido en el encabezado
<time.h>
|
||
|
Definido en el encabezado
<wchar.h>
|
||
|
#define NULL /*implementation-defined*/
|
||
La macro
NULL
es una constante de puntero nulo definida por la implementación, que puede ser
- una expresión constante entera con el valor 0
- una expresión constante entera con el valor 0 convertida al tipo void *
|
(desde C23) |
Una constante de puntero nulo puede ser convertida a cualquier tipo de puntero; dicha conversión resulta en el valor de puntero nulo de ese tipo.
Contenidos |
Notas
POSIX requiere
NULL
que sea definido como una expresión constante entera con el valor
0
convertido a
void
*
.
Implementación posible
// Compatible con C++: #define NULL 0 // Incompatible con C++: #define NULL (10*2 - 20) #define NULL ((void*)0) // desde C23 (compatible con C++11 y posteriores) #define NULL nullptr |
Ejemplo
Ejecutar este código
#include <inttypes.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> int main(void) { // cualquier tipo de puntero puede establecerse en 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); // muchas funciones que devuelven punteros utilizan punteros nulos para indicar error char *ptr = malloc(0xFULL); if (ptr == NULL) printf("Memoria insuficiente"); else printf("ptr = %#" PRIxPTR"\n", (uintptr_t)ptr); free(ptr); }
Salida posible:
(nil) (nil) (nil) ptr = 0xc001cafe
Véase también
|
(C23)
|
el tipo de la constante de puntero nulo predefinida
nullptr
(typedef) |
|
Documentación de C++
para
NULL
|
|