constant is too large for long long 경고 메시지

기술노트 87534

아키텍처:

All

컴포넌트:

compiler

업데이트:

2021-05-12 오전 5:02

소개

2147483648 십진수 상수를 사용했을 때 다음과 같이 메시지가 발생될 수 있습니다:

Warning[Pe1297]: constant is too large for long long; given unsigned long long type (nonstandard)

가능한 해결방안

  • 리터럴 접미사를 사용한다. (e.g., 2147483648UL)
  • 8진수 혹은 16진수 표기법을 사용한다. (e.g., 0x80000000)
  • 너무 크지 않은 상수와 결합하여 사용한다, 예시로, LONG_MIN
  • #define LONG_MIN (-2147483647-1)

배경지식

리터럴 접미사를 사용하지 않는 10진수 상수형식은 다음의 리스트에 있는 타입과 가장 먼저 일치 해야한다.

int, long int, long long int

2147483648 (= 0x8000 0000) 상수는 long long int 와 맞지 않는다.

따라서, 컴파일러는 해당 상수를 unsigned long long int 로 처리하고, 적절한 경고를 발생시킨다

참고

형변환...

/*...*/ (unsigned long long) 2147483648; /*...*/

...은 상수가 타입을 가지기 전까지는 적용되지 않습니다. 해당 기술 노트  60149 를 확인하세요.

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.