考虑以下代码片段:
long long someVar64 = 0LL;
int someVar32 = someVar64;
如果不明显,这里有一个潜在的错误,即 64 位值被分配给 32 位值,导致位丢失。在这种情况下,这很好,因为我们不关心 0 的高位,但是如果我更改常量,我很容易创建一个错误。
为什么 GCC (4.4.3) 不为此代码生成警告?我记得以前的旧版本。
考虑以下代码片段:
long long someVar64 = 0LL;
int someVar32 = someVar64;
如果不明显,这里有一个潜在的错误,即 64 位值被分配给 32 位值,导致位丢失。在这种情况下,这很好,因为我们不关心 0 的高位,但是如果我更改常量,我很容易创建一个错误。
为什么 GCC (4.4.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