我有要在预处理期间加载的数据文件。
DATAFILE :
CAR(C1, C2, C3)
可以有n个汽车(C1,C2 ...... Cn),目前为3个。 C1 ...是具有特定值的枚举字段,例如C1 = 5,C2-8,c3-10。
我想将此数据填充到汽车阵列CAR_SUPPORTED[MAX_CARS]
中,以使
CAR_SUPPORTED[C1] = 1 and similarly for C2,C3.. so on.
我尝试了可变参数宏:
int CAR_SUPPORTED[] ={
#define CAR(...) __VA_ARGS__};
#include "car.data"
但这只能复制5、8、10到0,1,2索引。
我将如何编写一个使CAR_SUPPORTED [C1] = 1等的宏。 有什么建议吗?
答案 0 :(得分:0)
只需在指定符上使用数组初始化:
#define CAR(C1, C2, C3) [C1] = 1, [C2] = 1, [C3] = 1 };
如果您要将其用于可变数量的args,我希望使用P99或提升预处理器宏,或者您可以自己编写宏扩展。使用boost的示例:
#include <boost/preprocessor.hpp>
#define CAR_ONE(r, data, elem) [elem] = 1,
#define CAR(...) BOOST_PP_SEQ_FOR_EACH(CAR_ONE,,BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) };
CAR(A1, A2, A3)