Как создать предупреждение компилятора «оператор не имеет никакого эффекта» в коде c / c ++ - PullRequest
3 голосов
/ 29 января 2011

Для моих тестов компилятора мне нужно сгенерировать это предупреждение "Заявление не имеет никакого эффекта" в моем тестовом коде.Как я могу это сделать?

Используя VS cl.exe компилятор

Ответы [ 5 ]

6 голосов
/ 29 января 2011
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 голосов
/ 29 января 2011
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 голосов
/ 29 января 2011
void f();
int main()
{
   f; // Statement has no effect
}

http://ideone.com/oB9kf

1 голос
/ 29 января 2011

Еще один:

x == 0;

Недавно я нашел один из них в каком-то коде (написанном другими) - я исправил его в предполагаемом «x = 0;».

GCC 4.2.1 в MacOS X 10.6.6.

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 голосов
/ 29 января 2011

Следующий код 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 '='?

В ваших комментариях вы, кажется, действительно сосредоточены на получении предупреждениянет эффекта"). Согласно MSDN , это предупреждение задокументировано только для VS6.Поэтому я думаю, что если вы хотите этот конкретный код ошибки, вам нужно выкопать VC ++ 6.

...