#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
我怎样才能让它发挥作用?
答案 0 :(得分:3)
问题是_Pragma
希望有一个像这样的转义字符串文字
_Pragma("GCC diagnostic ignored \"-Wuseless-cast\"")
所以诀窍是在SUPPRESS
的调用和_Pragma
的调用之间添加另一层stringyfication,如下所示
#define xSUPPRESS(w) _Pragma(#w)
#define SUPPRESS(w) xSUPPRESS(GCC diagnostic ignored w)
SUPPRESS("-Wuseless-cast")
在行动中查看here。