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
for
NULL
|
|