对于我的编译器测试,我需要在测试代码中生成此警告“语句无效”。我怎样才能做到这一点?
使用VS cl.exe编译器
so ross$ cat > noeff.c
void f(void) {
1;
}
so ross$ cc -Wall -c noeff.c
noeff.c: In function ‘f’:
noeff.c:2: warning: statement with no effect
so ross$
int main()
{
5; // Statement has no effect
return 0;
}
编辑1在VC++ 2010上尝试过
#include <iostream>
#pragma warning(default:4555)
int main()
{
5;
getchar();
return 0;
}
输出:
warning C4555:main.cpp(6): expression has no effect; expected expression with side-effect
注意:VC++ 2010 的列表中似乎没有 C4705 警告。 MSDN 编译器警告
void f();
int main()
{
f; // Statement has no effect
}
还有一个:
x == 0;
我最近在一些代码(由其他人编写)中发现了其中之一 - 我将其修复为预期的“
x = 0;
”。
MacOS X 10.6.6 上的 GCC 4.2.1。
cc -Wall -c x.c
x.c: In function ‘f’:
x.c:5: warning: statement with no effect
代码:
int f(int x)
{
x *= 3;
if (x % 2 == 0)
x == 0;
return x;
}
使用其他编译器得到的结果取决于其他编译器。
无论该编译器的默认警告级别如何,以下 C 代码都会在 VS2008 中生成以下警告:
int main()
{
int a = 0;
1; // this doesn't seem to generate a warning
a + 1;
a == 0;
return 0;
}
C:\temp\test.c(5) : warning C4552: '+' : operator has no effect; expected operator with side-effect
C:\temp\test.c(6) : warning C4553: '==' : operator has no effect; did you intend '='?
在您的评论中,您似乎实际上专注于获得警告 C4705(“声明无效”)。 根据 MSDN,似乎该警告仅针对 VS6 有记录。 所以我认为如果你想要特定的错误代码,你需要挖掘 VC++ 6。