【发布时间】:2011-01-25 00:19:05
【问题描述】:
我正在尝试创建一个宏来自动在 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##;
也不行。
【问题讨论】:
-
顺便说一句,在 C 中,getter 和 setter 的优点是什么?
-
诊断预处理错误的简单方法是仅通过预处理器运行您的源代码,然后查看结果。
标签: c macros struct concatenation