Clang最近实施了一个恼人的警告。如果我使用#pragma clang diagnostic ignored
禁用它,那么较旧的Clang版本将发出“未知警告组”警告。
有没有办法测试警告是否已实施?
答案 0 :(得分:2)
Clang的最新版本实现了__has_warning
功能检查宏。由于Clang只使用一个警告标志池来模拟GCC(反之亦然),因此使用特征检查内省对GCC进行编码是合理的:
#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
这有点繁琐的copypasta。使用包含文件可以避免这样做:
#define SUPPRESS_WARNING "-Wwhatever"
#include "suppress_warning.h"
// Code that trips warning
#include "unsuppress_warning.h"
suppress_warning.h
有点棘手,因为__has_warning
和#pragma
不接受宏作为参数。因此,请从Github或此Wandbox demo获取。