1

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

#define     create_var( name )  char #name

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

#define     create_var( name )  char prefix##name

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

有什么技巧可以获取一个简单的名字吗?

create(test)扩大

char test;

首先十分感谢,

4

1 回答 1

2

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

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

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

于 2013-07-16T22:13:25.890 回答