2011-01-02 14 views
5

intshortまたはuint32_tuint8_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 

。実際には、入力と出力のタイプ(例えば、longunsigned char)に対して警告を出すことはありません。

私はgccの実際のバグを見つけたことがないので、この動作には理由があると確信しています。

なぜ警告が表示されないのですか?

更新:gcc 4.1.2を使用します。

+0

@icecrime:gccは確かにそれをコンパイルする必要があります。 shortがintよりも短いプラットフォームでは、それは警告しなければなりません。 –

答えて

5

私はそれを再現できません。このコードをgcc 4.4.5で-Wconversionでコンパイルすると、私は

a.cc: In function ‘void f()’: 
a.cc:7: warning: conversion to ‘short int’ from ‘int’ may alter its value 
+0

うん、私も4.5.2 - 変換。 –

関連する問題