gcc 预处理器中的去字符串化

Posted

技术标签:

【中文标题】gcc 预处理器中的去字符串化【英文标题】:Destringification in the gcc preprocessor 【发布时间】:2015-08-04 10:36:25 【问题描述】:

是否可以编写一个解串字符串文字参数的 gcc 宏?我知道# 可能会发生相反的情况。可以逆转吗?

例如,__func__ 以字符串文字的形式计算出当前函数的名称。我可以去掉它周围的双引号吗?

【问题讨论】:

__func__ is not a macro 我不认为这是可能的,你不能不定义一个宏来保存函数名。 【参考方案1】:

不,无法使用标准 C/C++ 预处理器将 "foo" 转换为 foo。如果你绝对需要这个,你需要创建一个外部预处理程序,类似于 Qt 使用其moc 工具所做的。

并非完全切题,但 D 语言正好有这个功能——它被称为mixins。您可以在编译时执行任意字符串处理代码,并使用 mixin 关键字将结果“粘贴”到源文件中。

【讨论】:

谢谢。很好的答案!

以上是关于gcc 预处理器中的去字符串化的主要内容,如果未能解决你的问题,请参考以下文章

C++ 预处理器中的前缀增量

如何处理jQuery选择器中的特殊符号

php 布局构建器中的facetwp数组处理

处理 BeautifulSoup CSS 选择器中的冒号

argparse 未正确处理子解析器中的缩写

在 spark mllib 分类器中处理 null/NaN 值