我想创建几个形式的变量:
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 }
我在这里做错了什么? :) 任何帮助表示赞赏
答案 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