C宏连接创建结构

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)

也行不通.

Bla*_*way 5

问题是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)