我想了解这个问题的基础。 我怀疑强制转换有问题,它在本不应该的时候偶尔输入if语句。我读了一些帖子,但不明白到底是什么问题。 相关代码:
int32_t my_int_var; // this should not be less than -20
#define MY_DEFAULT_VAR 20u
if(my_int_var < (-1*MY_DEFAULT_VAR)){
FailTest();
}
答案 0 :(得分:4)
由于MY_DEFAULT_VAR值末尾的' u ',因此该表达式存在从有符号到无符号的隐式转换
-1 * MY_DEFAULT_VAR
这将导致一个无符号的数字
比较是一个大的无符号数字0xffffffe0
这现在不符合预期,例如如果my_int_var是20
if( 20 < 0xffffffe0 ) { /* this would now be true */