Namespaces
Variants

NULL

From cppreference.net
< c ‎ | types
定義先ヘッダ <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);
    // 多くのポインタ返却関数はエラーを示すためにNULLポインタを使用
    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 の型
(typedef)