Jef*_*amb 2 c macros struct concatenation
我正在尝试创建一个宏来自动化在C中的简单"数据库"中为不同类型的变量创建访问器.这是通过结构来完成的:
typedef struct {
int var1;
long var2;
double var3;
int var4;
} dataNames_t;
Run Code Online (Sandbox Code Playgroud)
但是,自动化的东西,我想创建一堆宏模仿的功能超载,所以我不必须有单独的getInt
,getBool
,getLong
,等功能.我们经常这样做,所以我们可以非常快速地将条目添加到非常相似的长列表中.这样我们就不必修改文件中的5个位置来添加条目.但是,我似乎无法弄清楚结构.
#define DATA_LIST \
DM(var1, int), \
DM(var2, long), \
DM(var3, double), \
DM(var4, int)
#define DM(y, z) z y;
/* create data structure from the macro */
typedef struct {
DATA_LIST
} dataNames_t;
Run Code Online (Sandbox Code Playgroud)
这个结构应该评估第一个,但是某些东西不能正常工作.
#define DM(y, z) z y##;
Run Code Online (Sandbox Code Playgroud)
也行不通.
问题是DM(...)
你们每个人的结尾都有逗号DATA_LIST
; 你的结构有效地扩展到:
typedef struct {
int var1;,
long var2;,
double var3;,
int var4;
} dataNames_t;
Run Code Online (Sandbox Code Playgroud)
将您更改DATA_LIST
为:
#define DATA_LIST \
DM(var1, int) \
DM(var2, long) \
DM(var3, double) \
DM(var4, int)
Run Code Online (Sandbox Code Playgroud)