为什么海湾合作委员会不会因失去解决方案而产生警告?

时间:2012-11-27 19:37:34

标签: gcc

考虑以下代码片段:

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

如果不明显,这里有一个潜在的错误,即64位值被分配给32位值,导致位丢失。在这种情况下,它很好,因为我们不关心0的高位,但如果我改变常量,我可以很容易地创建一个bug。

为什么GCC(4.4.3)没有为此代码生成警告?我记得以前的旧版本。

1 个答案:

答案 0 :(得分:3)

此警告由-Wconversion启用。请注意,-Wall或-Wextra未启用它。

  

-Wconversion

     

警告可能会改变值的隐式转换。这包括转化   在实数和整数之间,如x是abs (x)   双;签名和未签名之间的转换,如   unsigned ui = -1;转换为较小的类型,例如sqrtf (M_PI).

     

请勿警告abs ((int) x)ui = (unsigned) -1之类的明确演员表,   或者如果abs (2.0)中的转换没有改变该值。

     

[...]

来源:http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Warning-Options.html#Warning-Options