1

次のコード フラグメントを検討してください。

long long someVar64 = 0LL;
int someVar32 = someVar64;

明らかでない場合は、64 ビット値が 32 ビット値に割り当てられ、ビットが失われるという潜在的なバグがあります。この場合、0 の上位ビットは気にしないので問題ありませんが、定数を変更すると、簡単にバグが発生する可能性があります。

GCC (4.4.3) がこのコードに対して警告を生成しないのはなぜですか? 古いバージョンが使用されていたことを思い出します。

4

1 に答える 1

3

この警告は、-Wconversion によって有効になります。-Wall または -Wextra では有効にならないことに注意してください。

-Wコンバージョン

値を変更する可能性のある暗黙の変換について警告します。abs (x)これには、x が double の場合のように、実数と整数の間の変換が含まれます。符号付きと符号なしの間の変換など、 unsigned ui = -1;およびより小さな型への変換などsqrtf (M_PI).

abs ((int) x)andのような明示的なキャストui = (unsigned) -1、または in のように値が変換によって変更されない場合は、警告しませんabs (2.0)

[...]

ソース: http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Warning-Options.html#Warning-Options

于 2012-11-27T22:54:04.300 に答える