2017-03-23 3 views

Antwort

1

Neueste Versionen von Clang implementieren das Feature-Check-Makro __has_warning. Da Clang GCC emuliert (nicht umgekehrt) mit nur einem Pool von Warnflaggen, es sinnvoll ist gegen GCC codieren Selbstbeobachtung mit Feature-Check:

#if __GNUC__ && defined(__has_warning) 
# if __has_warning("-Wwhatever") 
#  define SUPPRESSING 
#  pragma GCC diagnostic push 
#  pragma GCC diagnostic ignored "-Wwhatever" 
# endif 
#endif 

// Code that trips warning 

#ifdef SUPPRESSING 
# undef SUPPRESSING 
# pragma GCC diagnostic pop 
#endif 

Dies ist ein bisschen umständlich copypasta. Es kann mit einer Aufnahme-Datei vermieden werden, wie folgt aus:

#define SUPPRESS_WARNING "-Wwhatever" 
#include "suppress_warning.h" 

// Code that trips warning 

#include "unsuppress_warning.h" 

suppress_warning.h ist ein bisschen schwierig, weil __has_warning und #pragma keine Makros als Argumente akzeptieren. Also, holen Sie es von Github oder Wandbox demo.

+0

@NathanOliver 'definiert (__has_warning)' wird in solchen Compilern zu 'false' ausgewertet. – Potatoswatter

+0

Ich habe das gerade gesehen. Kommentar zurückgezogen – NathanOliver

+0

@NathanOliver Es ist in Ordnung :) Ich werde nur meine Antwort als Talisman gegen die Sorge, die wieder aufgeworfen wird. – Potatoswatter

Verwandte Themen