技術

C++の16進リテラルでコンパイルエラー

とりあえずメモ。

Apple LLVM compiler 4.1のC++ Language DialectをGNU++11にすると次のようなC++のコードで16進リテラル部分を0x7FFFFFFF以上にするとコンパイルエラーが発生する。

int test[] = {0xFFFFFF9C};

エラー内容は次のような感じで、どうもリテラルをunsigned intと解釈したとして、それがintの範囲を超える場合に起きるみたい。

Constant expression evaluates to 4294967196 which cannot be narrowed to type 'int'

ちなみに次のように配列じゃなければエラーにはならない。

int test = 0xFFFFFF9C;

手っ取り早い解決方法は、C++ Language DialectをCompiler Defaultにする事。

もうひとつは、C++ Language DialectはGNU++11のままで次のようにキャストしてしまう事。

int test[] = {(int)0xFFFFFF9C};

もしくは

int test[] = {static_cast<int>(0xFFFFFF9C)};

PVRTMathTable.h でエラーが出まくって気づいた。

コメントを残す

メールアドレスが公開されることはありません。



※画像をクリックして別の画像を表示

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください