2013-05-14 3 views
5

Как отключить следующее предупреждение в C++ в minGW?Как отключить предупреждения Unable Variable в Eclipse в minGW?

warning: unused variable 'x' [-Wunused-variable] 

В Eclipse CDT, я не могу найти номер предупреждения:

../src/subfolder/ClassTwo.cpp:20:8: warning: unused variable 'x' [-Wunused-variable] 

Я попытался сделать это:

#pragma warning(push) 
#pragma warning(disable: ?) //which number? 
#include "subfolder/ClassTwo.h" 
#pragma warning(pop) 

Но это не сработало.

Мои вопросы:

  1. Как я могу получить предупреждение номер этого в Eclipse CDT?
  2. Как должна быть написана прагма-директива?
+3

Если это параметр функции, просто оставить его без имени. Предполагая, что вы используете GCC, это скорее похоже на '#pragma gcc diagnostic'. – chris

+1

Просто исправьте код, и предупреждение уйдет само по себе ... - Кстати, что заставляет вас думать, что отключение предупреждений в заголовке поможет с предупреждением, которое, как представляется, происходит в репликах .cpp –

+0

, это может быть заголовок третьей стороны, который был построен с более расслабленными соглашениями. если нет, тогда да - просто исправьте это. – justin

ответ

3

Похоже, что выход из clang. Вы можете достичь того же с помощью лязг, используя подход, описанный здесь: http://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas:

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wunused-variable" 
#include "subfolder/ClassTwo.h"  
#pragma clang diagnostic pop 

Если это ваш исходный файл, а затем просто fix the warning.

Для GCC, вы можете использовать это: Selectively disable GCC warnings for only part of a translation unit?

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-variable" 
#include "subfolder/ClassTwo.h" 
#pragma GCC diagnostic pop 

Конечно, это оставит вас с хорошим количеством прагма шума - спорное, если это плохо =)

+0

Это просто gcc not clang – jiafu

+0

g ++ -I "C: \ c + \ gtest-1.6.0 \ gtest-1.6.0 \ include" -O0 -g3 -Wall -c -fmessage-length = 0 -MMD -MP - MF "src/Test.d" -MT "src/Test.d" -o "src/Test.o" "../src/Test.cpp" ../src/Test.cpp:1:0: предупреждение: игнорирование предупреждения #pragma [-Wunknown-pragmas] ../src/Test.cpp:2:0: предупреждение: игнорирование предупреждения #pragma [-Wunknown-pragmas] ../src/Test.cpp:3: 0: предупреждение: игнорирование предупреждения #pragma [-Wunknown-pragmas] ../src/Test.cpp:5:0: предупреждение: игнорирование предупреждения #pragma [-Wunknown-pragmas] – jiafu

+0

@jiafu ok - связанный подход GCC и добавлен способ устранения предупреждения. – justin

3

Вы похоже, используют синтаксис pragma в стиле Microsoft C++ с компилятором GCC. Понятие «номер предупреждения» (по крайней мере, в этом формате) также является специфическим для Microsoft C++. Другими словами, это не должно работать в GCC.

Не существует стандартного синтаксиса для отключения/включения предупреждений, поэтому каждый компилятор будет использовать свои собственные. Это означает, что нет никакого способа сделать это «на C++» (цитируя ваш заголовок). Есть только способы сделать это в каждом конкретном компиляторе. Для этого вам необходимо обратиться к своим документам компилятора.

В GCC вы можете сделать это с помощью параметров командной строки -Wno-unused-variable отключите все такие предупреждения для всей единицы перевода. Кроме того, в GCC вы можете выборочно отмечать переменные как неиспользуемые через __attribute__((unused)) для подавления предупреждений для этой конкретной переменной.

http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

6

Поскольку это ПОЧТИ всегда легко исправить «неиспользуемые переменные» предупреждения, я бы очень предпочел, чтобы установить фактический код, чем пытаться исправить его с прагмами (которые могут скрыть другие, будущие ошибки слишком - например, добавить новую функцию:

int foo(int x, int y) 
{ 
     return x * x; 
} 

к сожалению, это опечатка, это должно быть return x * y; - предупреждение даст вам указание, что это так.

Неиспользуемые параметры, а кто-то упомянул, рассматриваются путем удаления имени параметра:

int foo(int x, int) // Second parameter, y is not used 
{ 
     return x * x; 
} 

Если это локальная переменная, то вы можете использовать (void)y (возможно, в аа макро), чтобы «поддельные использование это ":

int bar(int x) 
{ 
    int y; // Not used. 
    (void)y; 
} 

или

#define NOT_USED(x) (void)(x) 

     int bar(int x) 
{ 
    int y; // Not used. 
    NOT_USED(y); 
} 
+0

спасибо, но я только хочу попробовать функцию прагмы, а не писать правильный код самостоятельно – jiafu

+0

Что такое Microsoft? 'UNREFERENCED_PARAMETER'? – chris

+0

Да, это было бы так. Я также видел «UNUSED (x)» как макрос для этого. –

Смежные вопросы