C 如何获取已分配但不再使用的变量的警告?
下面的文件C 如何获取已分配但不再使用的变量的警告?,c,gcc,compiler-warnings,clang,C,Gcc,Compiler Warnings,Clang,下面的文件foo.c是我在代码中发现的一个更微妙的bug的简化版本 int b; void bar(int a); void foo(int a) { bar(a); a = 42; } 这行a=42实际上是我代码中的一个输入错误:我的意思是b=42。我不希望编译器检测到我输入了错别字,但我希望得到一个警告,我正在给一个不再使用的局部变量(或函数参数)赋值。如果我用 % gcc-4.6 -Wall -Wextra -pedantic -O3 -c foo.c 我完全没有得到任何警
foo.c
是我在代码中发现的一个更微妙的bug的简化版本
int b;
void bar(int a);
void foo(int a)
{
bar(a);
a = 42;
}
这行a=42
实际上是我代码中的一个输入错误:我的意思是b=42
。我不希望编译器检测到我输入了错别字,但我希望得到一个警告,我正在给一个不再使用的局部变量(或函数参数)赋值。如果我用
% gcc-4.6 -Wall -Wextra -pedantic -O3 -c foo.c
我完全没有得到任何警告。检查生成的代码表明未执行赋值a=42
,因此gcc
非常清楚该指令是无用的(因此可能是伪造的)。注释对条(a)的调用
确实会产生警告警告:参数“a”已设置但未使用[-Wunused but set parameter]
,因此,只要函数中的某个地方使用了a
,即使在赋值之前,gcc
似乎也不会发出警告
我的问题是:
bar
的调用,我也无法让Clang3.0产生任何警告。)编译器将检测到这是死代码,并对其进行优化。如果您查看程序集列表(如果您告诉gcc进行优化),则会发现分配不存在。据我所知,没有
gcc
或clang
选项可以警告此无用的分配
另一方面,PC Lint
能够在这种情况下发出警告
警告438未使用分配给变量“Symbol”的最后一个值--
已分配给后来未使用的变量。这个
消息在return语句或语句末尾发出
当变量超出范围时阻塞
将函数参数设为a
const
,编译器会抱怨:void foo(int const a){/*…which…*/}
@pmg:更改源代码不是一个选项:我想在现有代码库中检测类似的无用赋值。如原问题所述,我已经告诉gcc
进行优化,我已经注意到作业已经优化了。问题是为什么编译器不让我知道我写了一些无用的东西,或者我如何配置它让我知道。你没有回答这个问题。他希望编译器在程序员没有注意到错误的情况下检测此类代码(因此不会深入研究清单文件)。