adl*_*adl 9 c gcc clang compiler-warnings
以下文件foo.c是我在代码中找到的更微妙的bug的简化版本.
int b;
void bar(int a);
void foo(int a)
{
bar(a);
a = 42;
}
Run Code Online (Sandbox Code Playgroud)
这条线a = 42在我的代码中实际上是一个错字:我的意思是b = 42.我不希望编译器检测到我输错了,但是我希望得到一个警告,我将分配给不再使用的局部变量(或函数参数).如果我用这个文件编译
% gcc-4.6 -Wall -Wextra -pedantic -O3 -c foo.c
Run Code Online (Sandbox Code Playgroud)
我完全没有警告.检查生成的代码表明a = 42没有执行赋值,因此gcc非常清楚这条指令是无用的(因此可能是假的).注释调用bar(a);确实会产生警告warning: parameter ‘a’ set but not used [-Wunused-but-set-parameter],所以gcc只要a在函数中的某个地方使用它就好像不会发出警告,即使它在赋值之前.
我的问题:
bar删除的电话,我也无法让clang 3.0发出任何警告.)据我所知,没有gcc任何clang选项可以警告这个无用的作业。
PC-Lint另一方面能够在这种情况下发出警告。
警告 438 未使用分配给变量“符号”的最后一个值-- 已将值分配给随后未使用的变量。当变量超出范围时,该消息会在 return 语句处或块末尾发出。
| 归档时间: |
|
| 查看次数: |
2009 次 |
| 最近记录: |