C ++ 98의 원래 의도 <cstdint>
는 전역 네임 스페이스를 오염시키지 않기 위해 C ++에서 사용해야한다는 것이 었 <cstdint>
습니다 (특히 C ++ 11에서만 추가되었지만 <c*>
일반적으로 헤더).
그러나 어쨌든 심볼을 전역 네임 스페이스에 넣는 구현은 지속되었고 C ++ 11은이 관행 [*]을 승인했습니다. 따라서 기본적으로 세 가지 옵션이 있습니다.
- 사용하는
<cstdint>
각 정수 유형을 사용 하고 완전히 한정하거나 using std::int32_t;
etc 로 범위로 가져옵니다 (장황하기 때문에 성가 시지만 C ++ 표준 라이브러리의 다른 기호와 마찬가지로 수행하는 올바른 방법입니다)
- 사용
<stdint.h>
( 사용 되지 않으므로 약간 나쁨)
- 사용
<cstdint>
하고 구현이 전역 네임 스페이스에 기호를 넣을 것이라고 가정합니다 (보장되지 않기 때문에 매우 나쁨).
실제로는 성가신 많은 양의 코드가 마지막 옵션을 사용한다고 생각합니다. 단순히 <cstdint>
전역 네임 스페이스에 기호를 넣는 구현에서 우연히 쉽게 수행 할 수 있기 때문 입니다. 첫 번째를 사용해야합니다. 두 번째는 하나의 미덕 을 가지고 있습니다. 그것은 단지 그것을하는 것이 아니라 전역 네임 스페이스에 물건을 넣는 것이 보장 된다는 것입니다 . 특히 유용하다고 생각하지 않지만 우선 순위라면 타이핑을 절약 할 수 있습니다.
네 번째 옵션이 있으며 #include <cstdint>
그 다음에 using namespace std;
는 때때로 유용하지만 using namespace std;
. 다른 사람들은 그 장소가 어디에 있는지 다른 생각을 가지 겠지만, "헤더 파일의 최상위 수준"은 "제한된 범위 내"보다 더 나쁜 "cpp 파일의 최상위 수준"보다 나쁩니다. 어떤 사람들은 전혀 글 using namespace std;
을 쓰지 않습니다 .
[*] 즉, C ++ 표준 헤더는 전역 네임 스페이스에 항목을 넣을 수 있지만 필수는 아닙니다. 따라서 이러한 기호와 충돌하는 것을 피해야하지만 실제로 사용할 수는 없습니다. 기본적으로 C ++의 전역 네임 스페이스는 지뢰밭이므로 피하십시오. 어떤 사람은위원회가 using namespace std;
헤더 파일의 최상위 수준에 고정하는 것만큼이나 해로운 구현으로 관행을 비준했다고 주장 할 수 있습니다 . 차이점은 구현은 C 표준 라이브러리의 기호에 대해서만 수행하고 using namespace std;
C ++ 에서는 수행한다는 점입니다. -전용 기호도 있습니다. C 표준에는 향후 표준에 추가하기 위해 예약 된 이름을 나열하는 섹션이 있습니다. 이러한 이름을 C ++ 전역 네임 스페이스에 예약 된 것으로 취급하는 것은 완전히 어리석은 생각은 아니지만 필수는 아닙니다.
<cstdint>
. 수신 된 오류는 다음과 같습니다./misc.h:7:10: fatal error: 'cstdint' file not found
..