cross-Plattform-makro zum abschalten von ungenutzten Variablen Warnung
In der Portierung ein großes Stück C++ - code von Visual Studio (2008) zu Xcode (4.4+), begegne ich Zeilen wie:
UNUSED_ALWAYS(someVar);
den UNUSED_ALWAYS(x)
(durch UNUSED(x)
) - makro expandiert zu x
scheint zu schweigen Visual C++ einfach nur gut. Es ist nicht genug für das Geräusch jedoch.
Mit Clang, ich verwende in der Regel die #pragma unused x
Richtlinie.
Den UNUSED_ALWAYS
und UNUSED
Makros definiert sind, in eine künstliche windows.h
- header, die ich Steuern, enthält eine Reihe von Dienstprogrammen, um zu helfen Xcode kompilieren Windows-Zeug.
Gibt es eine Möglichkeit zu definieren UNUSED(x)
zu erweitern, um #pragma unused x
? Ich habe versucht, die Clang nicht abnimmt:
#define UNUSED(x) #pragma unused(x)
Ich auch versucht:
#define UNUSED(x) (void)(x)
Scheint zu funktionieren. Hab ich was verpasst?
- Irgendeinen Grund, warum Sie nicht einfach loszuwerden, die nicht verwendete Variable? Können Sie weglassen der var-Namen in der Funktion argument-Liste in C++.
- Ich kann nicht: die variable wird verwendet, wenn das kompilieren unter windows.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Yup - Sie können diesen Ansatz für GCC und Clang:
zwar Tat mir die
(void)
Ansatz definiert das Geräusch, es scheint, dass Clang unterstützt jetzt die stringify und_Pragma
Ansatz oben._Pragma
ist C99._Pragma
variation. Ich denke, das ist das, was ich suchte.ist in Ordnung; hat bei mir immer funktioniert. Sie können in der Regel nicht erweitern, ein makro, ein #pragma, obwohl es in der Regel einen etwas anderen pragma-syntax, erzeugt werden können, in einem makro (_Pragma auf gcc und clang, __pragma auf VisualC++).
Immer noch, weiß ich nicht wirklich brauchen (void)x mehr in C++, da kann man einfach nicht geben einen Namen an eine Funktion parameter, um anzugeben, dass Sie es nicht verwenden:
funktioniert einwandfrei.
#define
und#pragma
beide sind Präprozessor-Direktiven. Sie kann nicht definieren, ein makro zu erweitern als Präprozessor-Direktive. Folgendes wäre falsch:MY_MACRO erweitern können, um
#if _WIN32
für die compiler.Ihre beste Wette ist, um zu definieren, Ihre eigenen makro:
#define UNUSED(_var) _var
funktioniert nicht mit Clang. Es noch Berichte, die variable als nicht verwendete.