ワーニングメッセージ: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も参照してください。

 

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。