Frage

Ich weiß, dass die #WARNING Richtlinie nicht Standard ist C / C ++, aber einige Compiler unterstützen es, einschließlich gcc / g ++. Aber für diejenigen, die es nicht unterstützen, werden sie es stillschweigend ignorieren oder wird es in einem Kompilierung Versagen führen? Mit anderen Worten, kann ich es in meinem Projekt sicher, ohne den Build für Compiler zu brechen, dass es nicht unterstützen?

War es hilfreich?

Lösung

Es ist wahrscheinlich, dass, wenn ein Compiler nicht #WARNING nicht unterstützt, dann wird es einen Fehler aus. Im Gegensatz zu Pragma gibt es keine Empfehlung, dass die Präprozessordirektiven ignorieren sie nicht verstehen.

Having said that, I-Compiler auf verschiedenen (recht häufig) Plattformen verwendet haben, und sie haben alle #WARNING unterstützt.

Andere Tipps

Es ist zu beachten, dass MSVC verwendet die Syntax:

#pragma message ( "your warning text here" )

Die übliche #WARNING Syntax erzeugt einen fatalen Fehler

C1021: invalid preprocessor command 'warning'

, so dass es zu diesen Compiler nicht tragbar ist.

Sie sind wahrscheinlich mindestens eine unbekannte Direktive Warnung von Compiler erhalten, die #WARNING nicht erkennen, auch wenn der Code-Block nicht in Ihrer Zusammenstellung enthalten ist. Das könnte oder nicht als Fehler behandelt werden. - die Compiler berechtigterweise als Fehler behandeln könnte, aber viele würden mehr lax

Sind Sie sich bewusst (können Sie nennen) einen Compiler andere als GCC / G ++, die #WARNING bietet? [ Editiert: 10 Sun Solaris (Sparc) und die 11 Studio C / C ++ Compiler beide #WARNING akzeptieren.]

Ich hatte dieses Problem einmal mit einem Compiler für einen Atmel-Prozessor. Und es hat Präprozessor Fehler aufgrund des unbekannten #WARNING Token erzeugen.

Leider schien die Lösung zu sein, den gesamten Quellbaum zu wandeln das Pragma äquivalent zu verwenden und akzeptieren, dass das Build-Verhalten bei Verwendung von gcc unterscheiden würde.

Wenn Sie von mingw zu Visual Studio Schalt, habe ich solche Zeilen zu meinem globalen Config-Header. (Schließen Sie es in stdafx.h)

#ifdef __GNUC__
//from https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
//Instead of put such pragma in code:
//#pragma GCC diagnostic ignored "-Wformat"
//use:
//PRAGMA_GCC(diagnostic ignored "-Wformat")
#define DO_PRAGMA(x) _Pragma (#x)
#define PRAGMA_GCC(x) DO_PRAGMA(GCC #x)

#define PRAGMA_MESSAGE(x) DO_PRAGMA(message #x)
#define PRAGMA_WARNING(x) DO_PRAGMA(warning #x)
#endif //__GNUC__
#ifdef _MSC_VER
/*
#define PRAGMA_OPTIMIZE_OFF __pragma(optimize("", off))
// These two lines are equivalent
#pragma optimize("", off)
PRAGMA_OPTIMIZE_OFF
*/
#define PRAGMA_GCC(x)
// https://support2.microsoft.com/kb/155196?wa=wsignin1.0
#define __STR2__(x) #x
#define __STR1__(x) __STR2__(x)
#define __PRAGMA_LOC__ __FILE__ "("__STR1__(__LINE__)") "
#define PRAGMA_WARNING(x) __pragma(message(__PRAGMA_LOC__ ": warning: " #x))
#define PRAGMA_MESSAGE(x) __pragma(message(__PRAGMA_LOC__ ": message : " #x))

#endif

//#pragma message "message quoted"
//#pragma message message unquoted

//#warning warning unquoted
//#warning "warning quoted"

PRAGMA_MESSAGE(PRAGMA_MESSAGE unquoted)
PRAGMA_MESSAGE("PRAGMA_MESSAGE quoted")

#warning "#pragma warning quoted"

PRAGMA_WARNING(PRAGMA_WARNING unquoted)
PRAGMA_WARNING("PRAGMA_WARNING quoted")

Jetzt benutze ich PRAGMA_WARNING (dieser Bedarf festgelegt werden)

Leider gibt es keine #pragma warning in gcc, so warnt es nicht spezifiziert Pragma.

Ich bezweifle, dass gcc #pragma warning" anstatt Microsoft Hinzufügen #warning hinzufügen.

Eigentlich die meisten Compiler, die ich kenne über unbekannte #pragma Richtlinien ignorieren und Ausgang einer Warnmeldung -. So im schlimmsten Fall, werden Sie noch eine Warnung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top