C++ primer에 따르면, <cstdlib>
헤더는 NULL
을 정의합니다. cpluspplus은 <cstddef>
에 정의되어 있다고 말합니다.C++에서 어떤 헤더가 NULL을 정의합니까?
궁극적으로 오른쪽 헤더가 포함되어 있지 않으면 NULL
을 참조 할 수 없다고 생각했습니다. 내가 무엇을 볼 수에서
<iostream>
포함 날이 이해를 도와주세요 후, 컴파일하고 경고 또는 오류없이 실행할 수 있습니다.
C++ primer에 따르면, <cstdlib>
헤더는 NULL
을 정의합니다. cpluspplus은 <cstddef>
에 정의되어 있다고 말합니다.C++에서 어떤 헤더가 NULL을 정의합니까?
궁극적으로 오른쪽 헤더가 포함되어 있지 않으면 NULL
을 참조 할 수 없다고 생각했습니다. 내가 무엇을 볼 수에서
<iostream>
포함 날이 이해를 도와주세요 후, 컴파일하고 경고 또는 오류없이 실행할 수 있습니다.
C++ 03 섹션 18.1.2는 NULL이 cstddef에 정의되어 있다고 표시한다.
일부 구현에서 iostream은 cstddef를 포함 할 수 있으므로 iostream을 포함하여 NULL도 제공됩니다.
그것은 테이블 (30) 그것은 말한다 <cstddef>
에서 무엇을 설명하고, <cstddef>
에서 C++ 11 표준 섹션 18.2을 정의됩니다
표 30 - 헤더
<cstddef>
개요매크로 :
NULL
[...][...] 매크로 NULL 이 국제 표준에서 구현 정의 C++ 널 포인터 상수이다.
질문에 대답하지 않습니다. 가치는 구현이 정의한 것이며 존재하지는 않습니다. –
위의 두 가지가 모두 포함되어 있지 않은데 왜 Okay가 작동합니까? –
@JamesLeonard : 다른 헤더는 '
C 표준은 NULL이 locale.h
, stddef.h
, stdio.h
, stdlib.h
, string.h
, time.h
및 wchar.h
에 정의해야합니다.
C++ 표준에서는 각 해당 문자에 해당하는 c*
헤더에 NULL을 정의해야합니다.
C 표준은 표준이 정의 할 수있는 이름에 대해 매우 엄격합니다. 각 표준 헤더는 표준에서 헤더가 정의하는 데 필요한 이름을 정확하게 정의해야합니다. 정의 할 수있는 유일한 다른 이름은 밑줄로 시작하여 밑줄이나 대문자가 오는 것과 같이 구현을 위해 예약 된 이름입니다.
C++ 표준은이 점에서 훨씬 더 관대합니다. 하나의 표준 헤더가 다른 표준 헤더를 포함하는 것과 동일한 효과를 가질 수 있습니다.
실용적인 견지에서 볼 때, C++ 구현은이 허용 성의 장점을 꽤 많이 사용했습니다. 즉, 하나의 표준 헤더를 포함하여 다른 여러 표준 헤더의 이름을 자주 정의했습니다. 보다 최근의 구현은 C 표준이 요구하는 것보다 더 많이 작동하는 경향이 있습니다. 각 헤더에 더 가깝게 머무르는 것은 헤더에 의해 정의되는 데 필요한 이름 만 정의합니다. 그것들은 C 표준이 요구하는 것만 큼 엄격하지는 않지만 아마도 (이전처럼) 훨씬 더 가깝습니다.
(는 MinGW 5.3.0) NULL이 같은 wchar.h 헤더에 정의 : C++ (11), NULL이 완전히되지 않습니다에,
#define NULL 0
이 질문은 특정 컴파일러에 관한 것이 아닙니다. R Sahu의 대답을보십시오 –
이것은 또한 이미'wchar.h' (또는'cwchar')가이 정의를 가지고 있음을 우리에게 알려주는 _four years ago_만큼 기존 답변에 아무 것도 추가하지 않습니다. –
BTW 대신 nullptr을 사용해야합니다. – wjl
괜찮습니다.하지만 질문에 대답하지 않습니다. –
@wjl : C++ 03에서도 'NULL'보다는 '0'을 사용하는 것이 좋습니다. –