C语言 使用预处理器比较定义的原始数据



我的头文件中有一个定义的原始数据(自动生成),如下所示:

#defined RAW_DATA 0x11, 0x20, 0x55, 0x00, x044

目的是在编译时检查RAW_DATA的特定参数,如果错误则抛出 #error。

例如,在编译过程中,预处理器应该检查 RAW_DATA 的第二个参数(在本例中为 0x20)是否真的0x20,如果它没有抛出 #error。

主要问题是如何访问定义RAW_DATA中的特定参数,是否可能?

附言我在 C 中使用 Keil 编译器。

#define RAW_DATA 0x11, 0x20, 0x55, 0x00, x044
#define X_GET_SECOND_PAR(par) GET_SECOND_PAR(par)
#define GET_SECOND_PAR(p1,p2,p3,p4,p5) p2
#if X_GET_SECOND_PAR(RAW_DATA) != 0x20
#error "2nd parameter shall be 0x20"
#endif

用于特定参数检查。它不优雅。

定义一个这样的宏

#defined RAW_DATA 0x11, 0x20, 0x55, 0x00, x044
#define RAW_DATA_PARAM_1(param1,param2,param3,param4,param5) param1 
#define RAW_DATA_PARAM_2(param1,param2,param3,param4,param5) param2
#define RAW_DATA_PARAM_3(param1,param2,param3,param4,param5) param3
#define RAW_DATA_PARAM_4(param1,param2,param3,param4,param5) param4
#define RAW_DATA_PARAM_5(param1,param2,param3,param4,param5) param5
#if RAW_DATA_PARAM_1(RAW_DATA) != 0x11
#error "wrong raw data param 1"
#elif RAW_DATA_PARAM_2(RAW_DATA) != 0x20
#error "wrong raw data param 2"
#elif RAW_DATA_PARAM_3(RAW_DATA) != 0x55
#error "wrong raw data param 3"
#elif RAW_DATA_PARAM_4(RAW_DATA) != 0x00
#error "wrong raw data param 4"
#elif RAW_DATA_PARAM_5(RAW_DATA) != 0x44
#error "wrong raw data param 5"
#endif

最新更新