ワーニングメッセージ:constant is too large for long long
テクニカル・ノート 87534
アーキテクチャ:
All
コンポーネント:
compiler
更新日:
2018/08/25 15:33
はじめに
10進定数の2147483648を使おうとすると、以下のメッセージが表示される。
Warning[Pe1297]: constant is too large for long long; given unsigned long long type (nonstandard)
考えられる解決方法
- サフィックスを使用する(例: 2147483648UL)
- 8進数または16進数で表現する(例: 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も参照してください。
全ての製品名は、それぞれの所有者の商標または登録商標です。