背景:结合以下用例输入,使用宏定义指定CANID时,发现嵌套宏定义是否带括号、三目运算符取最外层左右值的输出情况不同。其中CANID为11bit,怀疑是嵌套三目运算符带入函数导致CANID输入溢出,但是自己手动带入计算未果,网上搜索宏定义嵌套也眼花缭乱,目前未查明原因。后续有发现会更新。
详细程序内容如下:
#define PPCU 4
宏定义内容1:#define PPCUID (PPCU>3?0x134:(PPCU>2?0x133:(PPCU>1?0x132:0x131)))
宏定义内容2:#define PPCUID PPCU>3?0x134:(PPCU>2?0x133:(PPCU>1?0x132:0x131))
宏定义内容3:#define PPCUID PPCU>4?0x135:(PPCU>3?0x134:(PPCU>2?0x133:(PPCU>1?0x132:0x131)))
对于以上宏定义的使用:
fun1(PPCUID );//函数参数PPCUID用于输入ID
fun2(PPCUID +0x170);//函数参数PPCUID+0x170用于输入ID
使用宏定义内容1(使用无异常):
输出:fun1的PPCUID为0x134,fun2的PPCUID+0x170 为 0x2A1
输出:fun2的PPCUID为0x134,fun2的PPCUID+0x170 为 0x2A1
使用宏定义内容2(输出异常):
输出:fun1的PPCUID为0x134,fun2的PPCUID+0x170 为 0x2A1
输出:fun2的PPCUID为0x134,fun2的PPCUID+0x170 异常,未输出
使用宏定义内容3(使用无异常):
输出:fun1的PPCUID为0x134,fun2的PPCUID+0x170 为 0x2A1
输出:fun2的PPCUID为0x134,fun2的PPCUID+0x170 为 0x2A1