我需要在C中用宏生成一些变量名。 似乎#dards-pasting操作符完成了这项工作,但结果始终是一个字符串。
#define create_var( name ) char #name
将无法正常工作,因为名称正在“名称”中扩展(作为字符串)。
#define create_var( name ) char prefix##name
会起作用,但我的所有变种都会有一个前缀。
是否有任何技巧可以获得简单的名称?
create(test)
扩展
char test;
非常感谢,
答案 0 :(得分:1)
如果您希望变量名称在预处理代码中显示为未修改(无前缀),只需使用宏的形式参数名称,不使用#
且不使用##
。
如果要将某个参数转换为字符串常量,则可以在宏定义中#
。并且可以使用##
来连接标记来构建新标记(例如,使用前缀和/或后缀以及其他内容构建新的变量名称)。如果没有这些,预处理器将只插入令牌序列以传递给未修改的宏(*)。
(*):C预处理器语义很微妙。在宏扩展期间,预处理器宏在多个阶段被替换,这可能会产生非常明显的结果。