3

我想创建表单的几个变量:

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

4 回答 4

8

您需要连接它们:

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

解释:

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

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

所以paste(name, 1)创建了令牌name1

于 2012-12-26T10:20:07.650 回答
3

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

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

如果你用这个,

#define defineVar(x) static char #x ObjectKey

变量声明变成...

static char "foo" ObjectKey;
于 2012-12-26T10:26:36.467 回答
1

使用双哈希进行连接

#define defineVar(x) static char x##ObjectKey
于 2012-12-26T10:23:36.907 回答
0
The ## operator concatenates two tokens into one token
Hence 
defineVar(foo) will be replace with static char fooObjectKey
于 2012-12-26T10:27:57.350 回答