NULL
From cppreference.net
|
定義先ヘッダ
<locale.h>
|
||
|
定義先ヘッダ
<stddef.h>
|
||
|
定義先ヘッダ
<stdio.h>
|
||
|
定義先ヘッダ
<stdlib.h>
|
||
|
定義先ヘッダ
<string.h>
|
||
|
定義先ヘッダ
<time.h>
|
||
|
定義先ヘッダ
<wchar.h>
|
||
|
#define NULL /*implementation-defined*/
|
||
マクロ
NULL
は実装定義のヌルポインタ定数であり、以下のいずれかである可能性があります
|
(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
関連項目
|
(C23)
|
定義済みのヌルポインタ定数
nullptr
の型
(typedef) |
|
C++ documentation
for
NULL
|
|