【问题标题】:c macro, token pasting without quotesc宏,不带引号的令牌粘贴
【发布时间】:2013-07-16 22:02:28
【问题描述】:

我需要在 C 中使用宏生成一些变量名。 似乎#token-pasting 运算符完成了这项工作,但结果始终是一个字符串。

#define     create_var( name )  char #name

将不起作用,因为名称在“名称”(作为字符串)中扩展。

#define     create_var( name )  char prefix##name

会起作用,但我所有的变量都会有一个前缀。

有什么技巧可以获得简单的名字吗?

create(test) 展开

char test;

非常感谢,

【问题讨论】:

标签: c macros


【解决方案1】:

如果您希望您的变量名称在您的预处理代码中显示为未经修改(不带前缀),只需使用宏的形式参数名称,不带# 和不带##

如果您想将某些参数转换为字符串常量,您可以在宏定义中使用#。并且可以使用## 连接标记以构建新标记(例如,使用前缀和/或后缀和其他内容构建新变量名)。如果没有这些,预处理器将只插入标记序列以传递给未修改的宏 (*)。

(*):C 预处理器语义很微妙。在宏扩展期间,预处理器宏在多个阶段被替换,这可能会产生非常不明显的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2022-01-08
    • 1970-01-01
    • 2016-05-10
    • 2012-10-29
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多