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 를 확인하세요.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.