用于在C中创建变量的宏

时间:2012-12-26 10:17:13

标签: c macros

我想创建几个形式的变量:

static char fooObjectKey;
static char bazObjectKey;
static char wthObjectKey;
static char myObjectObjectKey;
...

所以我写了

#define defineVar(x) static char #x ObjectKey

defineVar(foo);
defineVar(baz);
defineVar(wth);
defineVar(myObject);

但我收到错误:Expected identifier or }

我在这里做错了什么? :) 任何帮助表示赞赏

4 个答案:

答案 0 :(得分:8)

你需要连接它们:

#define defineVar(x) static char x##ObjectKey

说明:

预处理程序运算符##提供了一种在宏扩展期间连接实际参数的方法。如果替换文本中的参数与##相邻,则参数将替换为实际参数,##和周围的空白区域将被删除,并重新扫描结果。例如,宏粘贴连接其两个参数:

#define paste(front, back) front ## back

因此paste(name, 1)会创建令牌name1

答案 1 :(得分:3)

宏中的

#用于字符串化参数,##用于宏中的连接...在您的情况下,以下是正确的语法..

#define defineVar(arg) static char arg##ObjectKey

如果你使用它,

#define defineVar(x) static char #x ObjectKey

变量声明变成......

static char "foo" ObjectKey;

答案 2 :(得分:1)

使用双哈希进行连接

#define defineVar(x) static char x##ObjectKey

答案 3 :(得分:0)

The ## operator concatenates two tokens into one token
Hence 
defineVar(foo) will be replace with static char fooObjectKey