如何在_Pragma的参数中连接字符串

时间:2017-08-18 17:50:44

标签: c gcc c-preprocessor pragma

_Pragma的参数是一个字符串,所以我认为当你以正常的c-preprocessor方式将字符串粘贴在一起时(即将它们放在彼此旁边),你就可以为_Pragma的参数形成一个新的字符串。然而

_Pragma("GCC Poison " "puts")

失败并显示错误

error: _Pragma takes a parenthesized string literal

如何规避这个?

这个特殊的例子不是很有用,并且有一个简单的解决方案,可以将它们全部放在一个字符串中,但最终目标是将宏字符串化为它

1 个答案:

答案 0 :(得分:0)

DO_PRAGMAin the GNU docs的定义如下

#define DO_PRAGMA(x) _Pragma (#x)

使用这个,如果你把两个单独的标记放在彼此旁边,它们就会变成字符串。要在定义中扩展宏,它必须经过一个间接层,因此定义为

#define DO_PRAGMA_(x) _Pragma (#x)
#define DO_PRAGMA(x) DO_PRAGMA_(x)

使用此功能,您可以为此类

等各种编译指示创建缩写
#define POISON(name) DO_PRAGMA(GCC poison name)
POISION(puts)//becomse _Pragma("GCC poison puts")

感谢Eugene Sh。用于指向DO_PRAGMA