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 回答