Spec-Zone.ru › C

NULL

Определено в заголовочном файле <locale.h>
Определено в заголовочном файле <stddef.h>
Определено в заголовочном файле <stdio.h>
Определено в заголовочном файле <stdlib.h>
Определено в заголовочном файле <string.h>
Определено в заголовочном файле <time.h>
Определено в заголовочном файле <wchar.h>
#define NULL /*implementation-defined*/

Макрос NULL — это определяемая реализацией константа нулевого указателя, которой может быть

  • целочисленное константное выражение со значением 0
  • целочисленное константное выражение со значением 0, приведённое к типу void*
  • предопределённая константа nullptr
(начиная с C23)

Константа нулевого указателя может быть преобразована в указатель любого типа; результатом такого преобразования является значение нулевого указателя этого типа.

Примечания

POSIX требует, чтобы NULL было определено как целочисленное константное выражение со значением 0, приведённым к void*.

Возможная реализация

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

Пример

#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);
}

Возможный вывод:

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

См. также

nullptr_t
(C23)
тип предопределённой константы нулевого указателя nullptr
(typedef)
Документация по C++ для NULL

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/types/NULL

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API