C宏连接以创建结构
我正在尝试创建一个宏,以便在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等函数。我们经常这样做,所以我们可以很快地将条目添加到非常相似的长列表中。这样,我们不必
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的优点是什么?诊断预处理错误的简单方法是只通过预处理器运行源代码,然后查看结果。