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 는 구현에서 정의된 널 포인터 상수이며, 다음과 같을 수 있습니다

(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

참고 항목

미리 정의된 널 포인터 상수 nullptr 의 타입
(typedef)