6

我想要一个像这样调用的宏:

GCC_WARNING(-Wuninitialized)

扩展为这样的代码:

_Pragma("GCC diagnostic ignored \"-Wuninitialized\"")

我没有运气让它工作,因为预处理器连接和字符串化的常用技巧似乎不适用,或者我不知道如何在这里应用它们。

4

2 回答 2

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)
于 2012-01-04T09:55:50.317 回答
0

如果宏参数用单引号括起来也可以接受吗?如果是这样,你可以使用这个:

#define GCC_WARNING(x) _Pragma("GCC diagnostic ignored '" #x "'")

当调用它时,GCC_WARNING(-Wuninitialized)它会扩展为

_Pragma("GCC diagnostic ignored '" "-Wuninitialized" "'")

我不得不在这里使用 C 的字符串连接行为(printf("a" "b");与 相同printf("ab");),因为"'#x'"在宏中使用可以避免这种x情况被扩展。

于 2012-01-04T09:53:18.857 回答