【问题标题】:Why doesn't GCC generate a warning for loss of resolution?为什么 GCC 不生成分辨率丢失警告?
【发布时间】:2012-11-27 19:37:33
【问题描述】:

考虑以下代码片段:

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

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

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

【问题讨论】:

  • 您是否尝试过明确启用此警告-Wconversion
  • 您没有指定使用什么标志来调用 GCC,但至少您应该使用 -Wall 作为起点。

标签: gcc


【解决方案1】:

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

-W转换

对可能改变值的隐式转换发出警告。这包括转化 介于实数和整数之间,例如 abs (x) 当 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多