Programing

int128_t는 왜 없는가?

c10106 2022. 4. 24. 10:31
반응형

int128_t는 왜 없는가?

다수의 컴파일러가 128비트 정수 유형을 제공하지만, 내가 사용한 컴파일러 중 어느 것도 타이핑된 정수 유형을 제공하지 않는다.int128_t.왜?

내가 기억하는 한, 표준은

  • 예비군int128_t이런 목적으로, 이것 때문에
  • 이러한 유형을 제공하는 구현을 장려하여 typef를 제공
  • 이러한 구현을 통해 다음과 같은 기능을 제공하도록 의무화intmax_t최소 128비트의

(그리고, 나는 내가 실제로 마지막 포인트에 부합하는 구현을 사용했다고 생각하지 않는다)

나는 C 표준을 참고할 것이다; 나는 C++ 표준이 다음에 대한 규칙을 계승한다고 생각한다.<stdint.h>/<cstdint>C로부터

나는 gcc가 128비트 서명되지 않은 정수를 그 이름과 함께 구현한다는 것을 알고 있다.__int128그리고unsigned __int128(__int128일부 플랫폼에서 구현 정의 키워드)를 참조하십시오.

표준 128비트 유형을 제공하는 구현의 경우에도 표준은 필요하지 않다. int128_t또는uint128_t규정되어 있다C 표준의 N1570 초안 제7.20.1.1절을 인용한다.

이러한 유형은 선택 사항이다.그러나, 구현이 두 개의 보완적 표현을 가진 8, 16, 32 또는 64비트의 너비, 패딩 비트 및 (서명된 유형의 경우)의 정수 유형을 제공하는 경우, 해당 형식 정의 이름을 정의해야 한다.

C는 구현 정의 키워드인 정의된 확장 정수 유형에 대한 구현을 허용한다.gcc의__int128그리고unsigned __int128표준에 의해 정의된 확장 정수 유형과 매우 유사하지만, gcc는 그것들을 그런 식으로 다루지 않는다.대신에, 그것은 그들을 언어의 확장으로 취급한다.

특히 다음과 같은 경우__int128그리고unsigned __int128확장된 정수 유형이었다. 그러면 gcc가 정의해야 한다.intmax_t그리고uintmax_t그러한 유형(또는 어떤 유형에서는 최소 128비트 폭)으로 한다.그것은 그렇게 하지 않는다; 대신에,intmax_t그리고uintmax_t64비트밖에 되지 않는다.

내 생각에 이것은 유감스럽지만, 나는 그것이 gcc를 부적합하게 만든다고 생각하지 않는다.어떤 휴대용 프로그램도 의 존재에 의존할 수 없다.__int128, 또는 64비트보다 큰 정수를 입력하십시오.그리고 변화하고intmax_t그리고uintmax_t심각한 ABI 호환성 문제를 일으킬 수 있음.

참조URL: https://stackoverflow.com/questions/29638723/why-isnt-there-int128-t

반응형