C ++ 11 표준에서 (강조 내) :
D.5 C 표준 라이브러리 헤더 [depr.c.headers]
- C 표준 라이브러리와의 호환성을 위해 ...
- 각각 name.h 형식의 이름을 가진 모든 C 헤더 는 해당 cname 헤더에 의해 표준 라이브러리 네임 스페이스에 배치 된 각 이름 이 전역 네임 스페이스 범위 내에 배치되는 것처럼 작동 합니다. 인 이 이름은 제 선언 또는 공간 범위 내에서 정의되어 있는지 불특정 (3.3.6) 의 네임 스페이스 STD 하고 명시하여 선언 - (7.3.3)가 글로벌 네임 스페이스의 영역에 주입된다.
- 예 : 헤더 는 네임 스페이스 내에서 선언 및 정의를
<cstdlib>
확실히 제공 합니다
std
. 또한 전역 네임 스페이스 내에서 이러한 이름을 제공 할 수 있습니다. 헤더 는 C 표준에서와 마찬가지로 전역 네임 스페이스 내 에서 동일한 선언과 정의를 <stdlib.h>
확실히 제공합니다 . 네임 스페이스 내에서 이러한 이름을 제공 할 수도 있습니다 .std
«name.h»헤더 사용은 더 이상 사용되지 않으며 향후 개정에서 제거 할 후보로 식별되었습니다.
따라서«cname»헤더를 포함하고 std
네임 스페이스 의 선언과 정의를 사용하는 것이 좋습니다 .
어떤 이유로«name.h»헤더를 사용해야하는 경우 (사용되지 않음, 위 참조) 전역 네임 스페이스의 선언 및 정의를 사용하는 것이 좋습니다.
즉, 선호
#include <cstdio>
int main() {
std::printf("Hello world\n");
}
위에
#include <stdio.h>
int main() {
printf("Hello world\n");
}
C
글로벌 네임 스페이스 에 라이브러리 심볼을 덤핑하는 것이 불법이라고 명령하는 경우 나는std::
qualified 버전을 사용하는 것을 선호합니다 . (또한 나는 그들이 그것을 불법으로 만들었 으면 좋겠다).