如何在c/c++代码中生成编译器警告“语句无效”

问题描述 投票:0回答:5

对于我的编译器测试,我需要在测试代码中生成此警告“语句无效”。我怎样才能做到这一点?

使用VS cl.exe编译器

c++ c warnings
5个回答
6
投票
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$ 

2
投票
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 编译器警告


2
投票
void f();
int main()
{
   f; // Statement has no effect
}

http://ideone.com/oB9kf


1
投票

还有一个:

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

使用其他编译器得到的结果取决于其他编译器。


0
投票

无论该编译器的默认警告级别如何,以下 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。

© www.soinside.com 2019 - 2024. All rights reserved.