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プリプロセッサはこれを実現する方法を提供していますか?