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.
@NathanOliver 'definiert (__has_warning)' wird in solchen Compilern zu 'false' ausgewertet. – Potatoswatter
Ich habe das gerade gesehen. Kommentar zurückgezogen – NathanOliver
@NathanOliver Es ist in Ordnung :) Ich werde nur meine Antwort als Talisman gegen die Sorge, die wieder aufgeworfen wird. – Potatoswatter