C宏连接以创建结构

C宏连接以创建结构,c,macros,struct,concatenation,C,Macros,Struct,Concatenation,我正在尝试创建一个宏,以便在C中的一个简单“数据库”中为不同类型的变量自动创建访问器。这是通过一个结构完成的: typedef struct { int var1; long var2; double var3; int var4; } dataNames_t; 但是为了实现自动化,我想创建一组宏来模拟函数重载,这样我就不必有单独的getInt、getBool、getLong等函数。我们经常这样做,所以我们可以很快地将条目添加到非常相似的长列表中。这样,我们不必

我正在尝试创建一个宏,以便在C中的一个简单“数据库”中为不同类型的变量自动创建访问器。这是通过一个结构完成的:

typedef struct {
    int var1;
    long var2;
    double var3;
    int var4;
} dataNames_t;
但是为了实现自动化,我想创建一组宏来模拟函数重载,这样我就不必有单独的
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;
此结构应计算为第一个结构,但某些部分工作不正常

#define DM(y, z)    z y##;

也不起作用。

问题是
数据列表中每个
DM(…)
末尾的逗号;您的结构正在有效地扩展到:

typedef struct {
    int var1;,
    long var2;,
    double var3;,
    int var4;
} dataNames_t;
将您的
数据列表更改为:

#define DATA_LIST       \
  DM(var1, int)         \
  DM(var2, long)        \
  DM(var3, double)      \
  DM(var4, int)

我怀疑问题在于
数据列表中每个
DM()
后都有逗号。

如果要查看预处理器的输出,请使用gcc中的
-E
标志。这在调试宏时非常有用

但是,在这种情况下,问题在于每一行上的逗号:

  DM(var1, int),         \
  DM(var2, long),        \
  DM(var3, double),      \
  DM(var4, int)

从数据列表中删除逗号:

#define DATA_LIST        \
  DM(var1, int),         \
  DM(var2, long),        \
  DM(var3, double),      \
  DM(var4, int)

顺便说一句,在C语言中,getter和setter的优点是什么?诊断预处理错误的简单方法是只通过预处理器运行源代码,然后查看结果。