在C中是否有类似于预处理变量的东西?它可以简化我的定义。
目前我有这样的代码:
typedef struct mystruct {
int val1;
int val2;
int val3;
int val4;
} MYSTRUCT;
typedef struct mysuperstruct {
MYSTRUCT *base;
int val;
} MYSUPERSTRUCT;
#define MY_OBJECT_BEGIN(name, val1, val2, val3, val4) \
MYSTRUCT name##Base = { val1, val2, val3, val4 }; \
MYSUPERSTRUCT * name##Objs = {
#define MY_OBJECT_VALUE(name, val) \
{ &(name##Base), val },
#define MY_OBJECT_END() \
NULL \
};
它的使用方法如下:
MY_OBJECT_BEGIN(obj1, 1, 2, 3, 4)
MY_OBJECT_VALUE(obj1, 5)
MY_OBJECT_VALUE(obj1, 6)
MY_OBJECT_VALUE(obj1, 7)
MY_OBJECT_END()
生成的结果如下所示:
MYSTRUCT obj1Base = { 1, 2, 3, 4 };
MYSUPERSTRUCT * obj1Objs = {
{ &(obj1Base), 5 },
{ &(obj1Base), 6 },
{ &(obj1Base), 7 },
NULL
}
很明显,重复使用对象名是多余的。我想将名称存储在MY_OBJECT_BEGIN定义中,作为某个预处理器变量,这样我就可以以下列方式使用它:
MY_OBJECT_BEGIN(obj1, 1, 2, 3, 4)
MY_OBJECT_VALUE(5)
MY_OBJECT_VALUE(6)
MY_OBJECT_VALUE(7)
MY_OBJECT_END()
标准的C预处理器提供一种实现这个的方法吗?