参数化警告消音宏故障
parameterized warning silencing macro trouble
#define SUPPRESS(w) _Pragma("GCC diagnostic ignored " ## w)
SUPPRESS("-Wuseless-cast")
int main() {
int a = (int)4;
return a;
}
这是错误:
error: pasting ""GCC diagnostic ignored "" and ""-Wuseless-cast"" does not give a valid preprocessing token
我怎样才能让它工作?
问题是 _Pragma
想要像这样的转义字符串文字
_Pragma("GCC diagnostic ignored \"-Wuseless-cast\"")
所以诀窍是在 SUPPRESS
的调用和 _Pragma
的调用之间添加另一层字符串化,如下所示
#define xSUPPRESS(w) _Pragma(#w)
#define SUPPRESS(w) xSUPPRESS(GCC diagnostic ignored w)
SUPPRESS("-Wuseless-cast")
查看它 here 的实际效果。
#define SUPPRESS(w) _Pragma("GCC diagnostic ignored " ## w)
SUPPRESS("-Wuseless-cast")
int main() {
int a = (int)4;
return a;
}
这是错误:
error: pasting ""GCC diagnostic ignored "" and ""-Wuseless-cast"" does not give a valid preprocessing token
我怎样才能让它工作?
问题是 _Pragma
想要像这样的转义字符串文字
_Pragma("GCC diagnostic ignored \"-Wuseless-cast\"")
所以诀窍是在 SUPPRESS
的调用和 _Pragma
的调用之间添加另一层字符串化,如下所示
#define xSUPPRESS(w) _Pragma(#w)
#define SUPPRESS(w) xSUPPRESS(GCC diagnostic ignored w)
SUPPRESS("-Wuseless-cast")
查看它 here 的实际效果。