Thr*_*Bit 6 c macros pragma stringify
我想要一个像这样调用的宏:
GCC_WARNING(-Wuninitialized)
Run Code Online (Sandbox Code Playgroud)
它扩展为这样的代码:
_Pragma("GCC diagnostic ignored \"-Wuninitialized\"")
Run Code Online (Sandbox Code Playgroud)
我没有运气让这个工作,因为预处理器加入和字符串化的常用技巧似乎不适用或我不知道如何在这里应用它们.
Lin*_*cer 15
在预处理器魔法的帮助下:
#define HELPER0(x) #x
#define HELPER1(x) HELPER0(GCC diagnostic ignored x)
#define HELPER2(y) HELPER1(#y)
#define GCC_WARNING(x) _Pragma(HELPER2(x))
GCC_WARNING(-Wuninitialized)
Run Code Online (Sandbox Code Playgroud)
如果宏参数用单引号引起来也可以接受吗?如果是这样,你可以使用这个:
#define GCC_WARNING(x) _Pragma("GCC diagnostic ignored '" #x "'")
Run Code Online (Sandbox Code Playgroud)
当调用它时,GCC_WARNING(-Wuninitialized)它会扩展为
_Pragma("GCC diagnostic ignored '" "-Wuninitialized" "'")
Run Code Online (Sandbox Code Playgroud)
我必须在这里利用 C 的字符串连接行为(printf("a" "b");与 相同printf("ab");),因为"'#x'"在宏中使用可以避免x扩展。