使用宏初始化特定的数组元素

时间:2018-10-25 11:37:19

标签: c c-preprocessor variadic-macros

我有要在预处理期间加载的数据文件。

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等的宏。 有什么建议吗?

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)