int
〜short
またはuint32_t
〜uint8_t
のように、「より長い」型付き変数の割り当てを使用することがよくあります。ある日、私はgccを使って自分のコードでそのようなすべてのケースを見つけることにしましたが、gccが警告を出さなかったという私の驚きを発見しました! (gccは出力警告しませんでした)助けにはならなかったgcc -Wall
またはgcc -Wconversion
を使用してintにshort(gcc)の割り当てに関する警告はありません
int long_value;
short short_value;
std::cin >> long_value; // Example input: 32769
short_value = long_value; // MS Visual Studio complains here at warning level 4
std::cout << "Long: " << long_value << '\n'; // My example output: 32769
std::cout << "Short: " << short_value << '\n'; // My example output: -32767
。実際には、入力と出力のタイプ(例えば、long
とunsigned char
)に対して警告を出すことはありません。
私はgccの実際のバグを見つけたことがないので、この動作には理由があると確信しています。
なぜ警告が表示されないのですか?
更新:gcc 4.1.2を使用します。
@icecrime:gccは確かにそれをコンパイルする必要があります。 shortがintよりも短いプラットフォームでは、それは警告しなければなりません。 –