>백엔드 개발 >C++ >C와 C에서 지나치게 큰 정수 리터럴이 때때로 `int`로 기본값이 아닌 이유는 무엇입니까?

C와 C에서 지나치게 큰 정수 리터럴이 때때로 `int`로 기본값이 아닌 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-07 17:47:14484검색

Why Do Excessively Large Integer Literals in C and C   Sometimes Not Default to `int`?

정수 리터럴: 기본적으로 항상 Int는 아님

루프에서 반복하는 동안 지나치게 큰 정수 리터럴은 예상치 못한 문제를 일으킬 수 있습니다. 일반적으로 접미사가 없는 리터럴은 int로 해석됩니다. 그러나 이 가정은 매우 큰 값에는 적용되지 않을 수 있습니다.

오버플로 및 승격

정수 리터럴이 int 범위(일반적으로 32비트)를 초과하는 경우 정의되지 않음 행동(UB)이 발생할 수 있습니다. 그러나 경우에 따라 컴파일러는 자동으로 리터럴을 long int(일반적으로 64비트)와 같은 더 큰 유형으로 승격할 수 있습니다.

표준 사양

C와 C 표준 모두 정수 리터럴의 승격을 적절하게 규제합니다. type.

  • C: C99 표준의 섹션 6.4.4.1에서는 리터럴 유형이 해당 값을 표현할 수 있는 첫 번째 목록이라고 명시합니다(예: int, long int). , long long int) 또는 필요한 경우 확장된 정수 유형입니다.
  • C : C 11 표준의 [lex.icon] ¶2 섹션에서는 필요에 따라 long int 또는 long long int로의 승격을 유사하게 지정합니다.

정수 리터럴 10000000000을 생각해 보세요. C 환경에서는 이는 긴 문자로 해석됩니다. 정수. 그러나 사용된 컴파일러가 32비트 컴파일러인 경우 리터럴이 사용 가능한 정수 유형에 비해 너무 커서 컴파일 오류가 발생할 수 있습니다.

위 내용은 C와 C에서 지나치게 큰 정수 리터럴이 때때로 `int`로 기본값이 아닌 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.