【发布时间】:2017-08-18 17:50:43
【问题描述】:
_Pragma 的参数是一个字符串,所以我认为当您以正常的 c 预处理器方式将字符串粘贴在一起时(即将它们彼此相邻),您可以为 _Pragma 的参数形成一个新字符串。不过
_Pragma("GCC Poison " "puts")
因错误而失败
error: _Pragma takes a parenthesized string literal
如何避免这种情况?
这个特殊的例子不是很有用,并且有一个简单的解决方案,可以将它们全部从一个字符串开始,但最终目标是将宏字符串化到其中
【问题讨论】:
-
一个
DO_PRAGMA宏作为here ? -
你试过
_Pragma("GCC Poison ""puts")吗? -
@Yunnosch 是的,它也失败了。 @尤金·什。
DO_MACRO很有希望,我还得测试一下有没有可能 -
“带括号的字符串文字”是否意味着“(blabla)”?
-
仅供参考,就预处理器而言,没有字符串文字连接之类的东西。特别是,C 预处理器在翻译阶段 4 中运行;字符串文字连接是翻译阶段 6 的功能。
标签: c gcc c-preprocessor pragma