以下是一些明显有缺陷的代码,我认为编译器应该发出诊断信息。但是gccg++都没有,即使我能想到的所有警告选项:-pedantic -Wall -Wextra

#include <stdio.h>

short f(short x)
{
    return x;
}

int main()
{
    long x = 0x10000007;   /* bigger than short */
    printf("%d\n", f(x));  /* hoping for a warning here */
    return 0;
}

有没有办法让gcc -Wconversion-Wconversion警告这个?另外,您是否有另一个编译器在默认情况下或在相当常见的额外警告配置中对此进行警告?

注意:我正在使用GCC(C和C ++编译器)版本4.2.4。

编辑:我刚发现g++ 4.4做了诀窍,但是<=>的选项没有,我在这里真的使用C ++,所以我需要<=>的解决方案(现在我想知道<=>似乎不是这样的原因。)

编辑: http://gcc.gnu.org/bugzilla/show_bug。 cgi?id = 34389 表明这可以在<=>中修复......也许?我还不清楚它是否是同一个问题和/或修复是否真的出现在那个版本中。也许有4.3或4.4的人可以试试我的测试用例。

有帮助吗?

解决方案

使用-Wconversion - 当调用函数f(short x)[not printf]时,问题是从long x到short的隐式转换(转换),-Wconversion会说像<!> quot; cast从长到短可能会改变值<!>“。

...

编辑:刚看到你的笔记。 -Wconversion给我一个警告,在Linux上使用g ++ 4.3.2 ...(4.3.2-1 on Debian)

其他提示

我强烈建议您从 Gimpel 投资PC-lint / FlexeLint。该软件用于捕获编译器不是这样的东西。它相对便宜,物超所值。网站上有一个可用于评估它的在线演示,以下是您为示例中的相关行报告的内容:

diy.cpp  14  Info 734: Loss of precision (arg. no. 1) (31 bits to 15 bits)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top