c宏,没有引号的标记粘贴

时间:2013-07-16 22:02:28

标签: c macros

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

#define     create_var( name )  char #name

将无法正常工作,因为名称正在“名称”中扩展(作为字符串)。

#define     create_var( name )  char prefix##name

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

是否有任何技巧可以获得简单的名称?

create(test)扩展

char test;

非常感谢,

1 个答案:

答案 0 :(得分:1)

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

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

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