2013-05-14 8 views
5

Wie kann ich die folgende Warnung in C++ in MinGW deaktivieren?Wie deaktiviere ich Unused Variable Warnungen in Eclipse in MinGW?

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

in Eclipse CDT, ich die Warnung Nummer nicht finden können:

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

Ich habe versucht, dies zu tun:

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

Aber es hat nicht funktioniert.

Meine Fragen:

  1. Wie kann ich die Warnung Anzahl dieser in Eclipse CDT erhalten?
  2. Wie sollte die Pragma-Direktive geschrieben werden?
+3

Wenn es ein Funktionsparameter ist, es ist einfach nicht namentlich verlassen. Angenommen, Sie verwenden GCC, ist es mehr wie '#pragma gcc diagnostic' etwas oder anderes, obwohl. – chris

+1

Repariere einfach den Code und die Warnung verschwindet von selbst ... - Was macht dich übrigens denken, dass das Deaktivieren der Warnungen in der Kopfzeile mit der Warnung, die in den .cpp –

+0

Kerlen auftritt, zu helfen, es kann ein 3rd-Party-Header sein, der mit entspannteren Konventionen gebaut wurde. wenn nicht, dann ja - repariere es einfach. – justin

Antwort

3

Es sieht aus wie die Ausgabe von 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 

Wenn die Quelldatei sind, dann nur fix the warning Sie können das gleiche mit Klappern mit dem Ansatz, der hier skizzierte erzielen.

Für GCC, können Sie diese verwenden: 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 

natürlich, dass man mit einer guten Menge von Pragma Lärm verlassen wird - fraglich, ob das eine schlechte Sache ist =)

+0

Es ist nur gcc nicht kling – jiafu

+0

g ++ -I "C: \ c + \ gtest-1.6.0 \ gtest-1.6.0 \ enthalten" -O0-g3 -Wall -c -message-length = 0 -MMD -MP - MF "src/Test.d" -MT "src/Test.d" -o "src/Test.o" "../src/Test.cpp" ../src/Test.cpp:1:0: Warnung: Ich ignoriere #pragma warning [-Wundnown-pragmas] ../src/Test.cpp:2:0: warning: ignoriere #pragma warning [-Wundnown-pragmas] ../src/Test.cpp:3: 0: Warnung: Ignorieren #pragma Warnung [-Wundnown-Pragmas] ../src/Test.cpp:5:0: Warnung: Ignorieren # Pragma Warnung [-Wundnown-Pragmas] – jiafu

+0

@ Jiafu ok - verknüpft den GCC-Ansatz und hat eine Möglichkeit hinzugefügt, die Warnung zu beheben. – justin

3

Sie scheinen Microsoft C++ - Stil-Pragma-Syntax mit GCC-Compiler zu verwenden. Das Konzept der "Warning Number" (zumindest in diesem Format) ist auch Microsoft C++ - spezifisch. Mit anderen Worten, dies sollte in GCC nicht funktionieren.

Es gibt keine Standard-Syntax zum Deaktivieren/Aktivieren von Warnungen, sodass jeder Compiler seinen eigenen verwendet. Das bedeutet, dass es "in C++" (unter Angabe Ihres Titels) nicht möglich ist. Es gibt nur Möglichkeiten, dies in jedem spezifischen Compiler zu tun. Sie müssen dazu Ihre Compiler-Dokumente konsultieren.

In GCC sollten Sie in der Lage sein, es über die Befehlszeilenoptionen -Wno-unused-variable tun, deaktivieren Sie alle solche Warnungen für die gesamte Übersetzungseinheit. In GCC können Sie Variablen auch selektiv als unbenutzt kennzeichnen, indem Sie __attribute__((unused)) unterdrücken, um Warnungen für diese spezifische Variable zu unterdrücken.

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

6

Da es fast immer einfach ist, „nicht verwendete Variable“ Warnungen zu beheben, würde ich sehr viel lieber den eigentlichen Code zu beheben, als versuchen, es mit Pragmas zu flicken (die anderen verstecken kann auch zukünftige Fehler - zum Beispiel eine neue Funktion hinzufügen:

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

Hoppla, dass ein Tippfehler, es sollte return x * y; sein - eine Warnung würden Sie Anzeichen dafür, dass dies der Fall ist.

Nicht verwendete Parameter, wie jemand erwähnt, werden behandelt, indem Sie den Namen des Parameters zu entfernen:

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

Wenn es sich um eine lokale Variable ist, dann kann man (void)y (vielleicht in aa Makro) verwenden, um „fake Einsatz it ":

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

oder

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

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

danke, aber ich möchte nur die Pragma-Funktion versuchen, nicht den richtigen Code Selbst schreiben – jiafu

+0

Was ist Microsoft's? 'UNREFERENCED_PARAMETER'? – chris

+0

Ja, das scheint der Fall zu sein. Ich habe auch "UNUSED (x)" als Makro dafür gesehen. –