vs
stdint.h
과 의 차이점은 무엇입니까 cstdint
?
둘 다 MSVC (Visual Studio 2010) 및 gcc-4.5.1에서 사용할 수 있습니다. 또한 둘 다 intX_t
/ uintX_t
유형을 정의합니다 (여기서는 유형의 X
바이트 크기).
- 두 헤더의 이론적 근거가 동일하다면 (이동 가능한 유형) 둘 중 하나를 결정하기 위해 어떤 결정을 내려야합니까?
은 stdint.h
어떤 네임 스페이스는하지 않고 각 유형을 정의 cstdint
의 유형 거짓말 std
네임 스페이스.
- 정의 된 유형을
std
네임 스페이스 에 포함하거나 포함하지 않을 이유가 있습니까? 두 헤더의 차이점은 무엇입니까?
cstdint
파일 확장자가없고 c
접두사를 stdint.h
사용하고 .h
확장자를 사용합니다 .
- 이 헤더의 명명 규칙은 무엇입니까?
c
접두사 이것은 C 라이브러리 있음을 나타냅니다? 파일 확장자가 부족한 이유가cstdint
있습니까?
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
심볼 이름이 표준 네임 스페이스의 수입 가능성이 글로벌 네임 스페이스입니다.
Including stdint.h
은 전역 네임 스페이스 및 가능하면 std 네임 스페이스의 심볼 이름을 가져옵니다 .
C 표준 라이브러리의 기능은 C ++ 표준 라이브러리에서도 제공되며 일반적인 명명 규칙으로 C 표준 라이브러리의 해당 이름 앞에 c가 추가됩니다.
C ++에서는 다음을 사용해야합니다.
#include <cstdint>
std::
C에서 사용하는 기호 이름을 완전히 한정 하려면 다음을 사용해야합니다.
#include <stdint.h>
부록 D (표준) 호환성 기능 [depr] 은 다음과 같이 설명합니다.
D.6 C 표준 라이브러리 헤더
1 C 표준 라이브러리 및 C 유니 코드 TR과의 호환성을 위해 C ++ 표준 라이브러리는 표 151과 같이 25 개의 C 헤더를 제공합니다.
포함하고있는:
<assert.h> <float.h> <math.h> <stddef.h> <tgmath.h>
<complex.h> <inttypes.h> <setjmp.h> <stdio.h> <time.h>
<ctype.h> <iso646.h> <signal.h> <stdint.h> <uchar.h>
<errno.h> <limits.h> <stdarg.h> <stdlib.h> <wchar.h>
<fenv.h> <locale.h> <stdbool.h> <string.h> <wctype.h>
그리고
2 각각 형식의 이름을 갖는 모든 C 헤더
name.h
는 해당하는 표준 라이브러리 네임 스페이스에 배치 된 각 이름cname header
이 글로벌 네임 스페이스 범위 내에 배치되는 것처럼 작동 합니다. 이러한 이름이 std 네임 스페이스의 네임 스페이스 범위 (3.3.6) 내에서 처음 선언되거나 정의 된 다음 명시 적 using-declarations (7.3.3)에 의해 전역 네임 스페이스 범위에 삽입되는지 여부는 지정되지 않습니다.3 [예 : 헤더
<cstdlib>
는 std 네임 스페이스 내에서 선언 및 정의를 확실히 제공합니다. 또한 전역 네임 스페이스 내에서 이러한 이름을 제공 할 수 있습니다. 헤더<stdlib.h>
는 C 표준에서와 마찬가지로 전역 네임 스페이스 내에서 동일한 선언과 정의를 확실히 제공합니다. std 네임 스페이스 내에서 이러한 이름을 제공 할 수도 있습니다. -예제 종료]
cstdint
C ++ 11 헤더,stdint.h
C99 헤더 (C와 C ++는 다른 언어입니다!)MSVC 2008 년 어느 쪽도 포함하지 않습니다
stdint.h
아니다cstdint
.의 구현
cstdint
은 대부분 단순히#include <stdint.h>
네임 스페이스 / 언어 수정으로 이루어집니다.
참고 URL : https://stackoverflow.com/questions/13642827/cstdint-vs-stdint-h
'your programing' 카테고리의 다른 글
Android PopupWindow가 활성화되었을 때 배경이 흐리거나 어둡습니다. (0) | 2020.10.13 |
---|---|
Angular 2의 구성 요소간에 데이터를 어떻게 공유합니까? (0) | 2020.10.12 |
신호 처리기에서 printf를 사용하지 않는 방법은 무엇입니까? (0) | 2020.10.12 |
Laravel의 Artisan을 설치하는 방법은 무엇입니까? (0) | 2020.10.12 |
ConfigureServices 메서드에서 IHostingEnvironment 액세스 (0) | 2020.10.12 |