NULL
From cppreference.net
|
Определено в заголовочном файле
<locale.h>
|
||
|
Определено в заголовочном файле
<stddef.h>
|
||
|
Определено в заголовочном файле
<stdio.h>
|
||
|
Определено в заголовочном файле
<stdlib.h>
|
||
|
Определено в заголовочном файле
<string.h>
|
||
|
Определено в заголовочном файле
<time.h>
|
||
|
Определено в заголовочном файле
<wchar.h>
|
||
|
#define NULL /*implementation-defined*/
|
||
Макрос
NULL
является определяемой реализацией константой нулевого указателя, которая может быть
- целочисленное константное выражение со значением 0
- целочисленное константное выражение со значением 0 приведённое к типу void *
|
(начиная с C23) |
Нулевой указатель-константа может быть преобразован в любой указательный тип; такое преобразование даёт нулевое значение указателя этого типа.
Содержание |
Примечания
POSIX требует
NULL
быть определённым как целочисленное константное выражение со значением
0
приведённым к типу
void
*
.
Возможная реализация
// Совместимо с C++: #define NULL 0 // Несовместимо с C++: #define NULL (10*2 - 20) #define NULL ((void*)0) // начиная с C23 (совместимо с C++11 и позднее) #define NULL nullptr |
Пример
Запустить этот код
#include <inttypes.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> int main(void) { // любой тип указателя может быть установлен в 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); // многие функции, возвращающие указатели, используют нулевые указатели для обозначения ошибки char *ptr = malloc(0xFULL); if (ptr == NULL) printf("Недостаточно памяти"); else printf("ptr = %#" PRIxPTR"\n", (uintptr_t)ptr); free(ptr); }
Возможный вывод:
(nil) (nil) (nil) ptr = 0xc001cafe
Смотрите также
|
(C23)
|
тип предопределённой константы нулевого указателя
nullptr
(typedef) |
|
C++ documentation
для
NULL
|
|