使用预处理器比较定义的原始数据
Comparing defined raw data using preprocessor
我的头文件中定义了原始数据(自动生成),如下所示:
#defined RAW_DATA 0x11, 0x20, 0x55, 0x00, x044
目的是在编译时检查RAW_DATA的特定参数,如果错误则抛出#error。
例如,在编译期间,预处理器应检查 RAW_DATA 的第二个参数(在本例中为 0x20)是否真的是 0x20,如果不是则抛出 #error。
主要问题,如何访问已定义的特定参数 RAW_DATA,是否可行?
P.S。我在 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
我的头文件中定义了原始数据(自动生成),如下所示:
#defined RAW_DATA 0x11, 0x20, 0x55, 0x00, x044
目的是在编译时检查RAW_DATA的特定参数,如果错误则抛出#error。
例如,在编译期间,预处理器应检查 RAW_DATA 的第二个参数(在本例中为 0x20)是否真的是 0x20,如果不是则抛出 #error。
主要问题,如何访问已定义的特定参数 RAW_DATA,是否可行?
P.S。我在 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