我有一些通过一些`.dbc`文件生成的原始头文件。由于其中一些消息代表数组中的元素,因此结构相等,因此生成的宏也相等。由于我在代码中填充了一些结构体数组,我希望节省精力并为所有对象使用相同的宏,但为了确保定义没有更改,我希望在编译时测试这些宏是否相等。
例如:
例如:
#define GET_PATTERN_01_PATTERNPOINT02Y(buf) (0 \
| (uint16)(-(uint16)((buf[7] >> 6) & 0x01) << 15) \
| (uint8)(+(uint8)((buf[6] >> 0) & 0xff) << 0) \
| (uint16)(+(uint16)((buf[7] >> 0) & 0x7f) << 8) \
)
#define GET_PATTERN_02_PATTERNPOINT04Y(buf) (0 \
| (uint16)(-(uint16)((buf[7] >> 6) & 0x01) << 15) \
| (uint8)(+(uint8)((buf[6] >> 0) & 0xff) << 0) \
| (uint16)(+(uint16)((buf[7] >> 0) & 0x7f) << 8) \
)
#if GET_PATTERN_01_PATTERNPOINT02Y != GET_PATTERN_02_PATTERNPOINT04Y
# error blah
#endif
这个可行吗? 如果有一些C++的解决方案也可能会有所帮助,但是宏已经固定了。