我可以让GCC警告将过多的类型传递给函数吗?

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

 #include  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; } 

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

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

编辑:我刚刚发现gcc -Wconversion可以解决这个问题,但g++的相同选项却没有,我在这里真的使用C ++,所以我需要一个g++解决方案(我现在想知道为什么-Wconversion没有似乎是这样)。

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

使用-Wconversion – 当函数f(short x)被调用[not printf]时,问题是从long x到short的隐式转换(转换),而-Wconversion会说“从long到short转换可能会改变值” ”。

..

编辑:刚刚看到你的笔记。 -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)