int64_t의 정의
C/C++는 처음이라 기본적인 타입에 대해 몇 가지 질문이 있습니다.
a) 어떤 차이가 있는지 설명해 주시겠습니까?int64_t
★★★★★★★★★★★★★★★★★」long
)long int
로는 둘 다 64번둘둘 중하 택택 택택 택? ???
는 b)의 했습니다.int64_t
웹상에서 큰 성공을 거두지 못했다.그런 질문에 대해 제가 상담해야 할 권위 있는 소식통이 있나요?
c)를 사용하는 int64_t
컴파일 하기 위해서, 나는 현재 포함시키고 있다.<iostream>
그 ?int64_t
a) 어떤 차이가 있는지 설명해 주시겠습니까?
int64_t
★★★★★★★★★★★★★★★★★」long
)long int
로는 둘 다 64번둘둘 중하 택택 택택 택? ???
전자는 정확히 64비트의 부호 있는 정수형입니다.후자는 32비트 이상의 부호 있는 정수형입니다.
는 b)의 했습니다.
int64_t
웹상에서 큰 성공을 거두지 못했다.그런 질문에 대해 제가 상담해야 할 권위 있는 소식통이 있나요?
http://cppreference.com 에서는, 다음의 URL 에 대해 설명합니다.http://en.cppreference.com/w/cpp/types/integer단, 신뢰할 수 있는 송신원은 C++ 표준입니다(이 특정 비트는 § 18.4 Integer types [cstdint]에 기재되어 있습니다).
c)를 사용하는
int64_t
컴파일하기 위해서, 나는 포함시키고 있다.<iostream>
그 ?int64_t
.<cstdint>
★★★★★★★★★★★★★★★★★」<cinttypes>
('네임스페이스')std
) 、 、 는 、 「 」<stdint.h>
★★★★★★★★★★★★★★★★★」<inttypes.h>
(일부러)
int64_t
C99 규격에 의해 C99를 실장하는 플랫폼에서는 정확하게 64비트의 폭을 보증합니다.long
32번입니다.
§ 7.18.1.3 정확한 폭의 정수형 1 typedef name intN_t는 너비 N, 패딩 비트 없음 및 2의 보완 표현을 갖는 부호 있는 정수형을 나타낸다.따라서 int8_t는 정확히 8비트의 폭을 갖는 부호 있는 정수형을 나타냅니다.
int64_t
typedef
은 '어디서'에 .<stdint.h>
c c c로
int64_t는 임의의 플랫폼에서 64비트폭(이름을 따옴)으로 해야 합니다.단, long은 플랫폼마다 길이가 다를 수 있습니다.특히, size of(long)는 종종 4(즉, 32비트)입니다.
현재 구현 시점 및 k8(x86_64) 아키텍처의 SWIG 사용자를 위한 2센트입니다.
리눅스
첫번째long long
그리고.long int
다른 타입이지만sizeof(long long) == sizeof(long int) == sizeof(int64_t)
GCC
먼저 컴파일러가 int64_t와 uint64_t를 정의하는 위치와 방법을 찾습니다.
grepc -rn "typedef.*INT64_TYPE" /lib/gcc
/lib/gcc/x86_64-linux-gnu/9/include/stdint-gcc.h:43:typedef __INT64_TYPE__ int64_t;
/lib/gcc/x86_64-linux-gnu/9/include/stdint-gcc.h:55:typedef __UINT64_TYPE__ uint64_t;
따라서 이 컴파일러 매크로 정의를 찾아야 합니다.
gcc -dM -E -x c /dev/null | grep __INT64
#define __INT64_C(c) c ## L
#define __INT64_MAX__ 0x7fffffffffffffffL
#define __INT64_TYPE__ long int
gcc -dM -E -x c++ /dev/null | grep __INT64
#define __INT64_C(c) c ## L
#define __INT64_MAX__ 0x7fffffffffffffffL
#define __INT64_TYPE__ long int
쨍그랑
clang -dM -E -x c++ /dev/null | grep INT64_TYPE
#define __INT64_TYPE__ long int
#define __UINT64_TYPE__ long unsigned int
Clang, GNU 컴파일러:
-dM
는 매크로 목록을 덤프합니다.
-E
파일 대신 stdout에 결과를 인쇄합니다.
-x c
그리고.-x c++
다음과 같이 파일 확장자가 없는 파일을 사용할 때 프로그래밍 언어를 선택합니다./dev/null
참고 자료: https://web.archive.org/web/20190803041507/http://https://web.archive.org/web/20190803041507/http
주의: swig 사용자의 경우 Linux x86_64에서 를 사용합니다.-DSWIGWORDSIZE64
MacOS
Catalina 10.15 IIRC에서
쨍그랑
clang -dM -E -x c++ /dev/null | grep INT64_TYPE
#define __INT64_TYPE__ long long int
#define __UINT64_TYPE__ long long unsigned int
쨍그랑:
-dM
는 매크로 목록을 덤프합니다.
-E
파일 대신 stdout에 결과를 인쇄합니다.
-x c
그리고.-x c++
다음과 같이 파일 확장자가 없는 파일을 사용할 때 프로그래밍 언어를 선택합니다./dev/null
참고 자료: https://web.archive.org/web/20190803041507/http://https://web.archive.org/web/20190803041507/http
참고: swig 사용자의 경우 MacOS x86_64에서는 사용하지 마십시오.-DSWIGWORDSIZE64
비주얼 스튜디오 2019
첫번째sizeof(long int) == 4
그리고.sizeof(long long) == 8
에stdint.h
다음과 같은 것이 있습니다.
#if _VCRT_COMPILER_PREPROCESSOR
typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef long long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
주의: swig 사용자의 경우 Windows x86_64에서는 사용하지 마십시오.-DSWIGWORDSIZE64
SWIG 관련 정보
먼저 https://github.com/swig/swig/blob/3a329566f8ae6210a610012ecd60f6455229fe77/Lib/stdint.i#L20-L24 를 참조해 주세요.그러면 typedef 를 제어할 수 있습니다.SWIGWORDSIZE64
그렇지만.....
단점: SWIG Java 및 SWIG CSHARP는 고려되지 않습니다.
그래서 당신은 아마 그것을 사용하는 것이 좋을지도 모릅니다.
#if defined(SWIGJAVA)
#if defined(SWIGWORDSIZE64)
%define PRIMITIVE_TYPEMAP(NEW_TYPE, TYPE)
%clear NEW_TYPE;
%clear NEW_TYPE *;
%clear NEW_TYPE &;
%clear const NEW_TYPE &;
%apply TYPE { NEW_TYPE };
%apply TYPE * { NEW_TYPE * };
%apply TYPE & { NEW_TYPE & };
%apply const TYPE & { const NEW_TYPE & };
%enddef // PRIMITIVE_TYPEMAP
PRIMITIVE_TYPEMAP(long int, long long);
PRIMITIVE_TYPEMAP(unsigned long int, long long);
#undef PRIMITIVE_TYPEMAP
#endif // defined(SWIGWORDSIZE64)
#endif // defined(SWIGJAVA)
그리고.
#if defined(SWIGCSHARP)
#if defined(SWIGWORDSIZE64)
%define PRIMITIVE_TYPEMAP(NEW_TYPE, TYPE)
%clear NEW_TYPE;
%clear NEW_TYPE *;
%clear NEW_TYPE &;
%clear const NEW_TYPE &;
%apply TYPE { NEW_TYPE };
%apply TYPE * { NEW_TYPE * };
%apply TYPE & { NEW_TYPE & };
%apply const TYPE & { const NEW_TYPE & };
%enddef // PRIMITIVE_TYPEMAP
PRIMITIVE_TYPEMAP(long int, long long);
PRIMITIVE_TYPEMAP(unsigned long int, unsigned long long);
#undef PRIMITIVE_TYPEMAP
#endif // defined(SWIGWORDSIZE64)
#endif // defined(SWIGCSHARP)
그렇게int64_t
아카long int
Java/C# 에 바인드 됩니다.long
Linux에서...
언급URL : https://stackoverflow.com/questions/13604137/definition-of-int64-t
'programing' 카테고리의 다른 글
Laravel에서 vue-filemanager 프런트엔드를 커스터마이즈하는 방법 (0) | 2022.08.07 |
---|---|
혼합 매니페스트가 존재하지 않습니다. (0) | 2022.08.07 |
상위 슬롯의 재사용 가능한 구성 요소 액세스 하위 메서드 (0) | 2022.08.03 |
술어로 첫 번째 요소 찾기 (0) | 2022.08.03 |
Java Enum 정의 (0) | 2022.08.03 |