平时写法不规范的时候,编译器都有提醒,今天不知道咋的没有提醒,就进到陷阱了,在此记录一下,也起提醒作用。
下面是抽象出来的代码,按照以下写法,会运行到Failed里面,aa-bb的值打印出来为4,比较纳闷,4>-3怎么还是进到下面的分支了。
如果使用前进行一下类型转换,改成 aa - (int32_t )bb,就会进行到正常分支,之前以为编译器会自动转换。使用minGW和VS运行结果相同
- int32_t aa = 5;
- uint32_t bb = 1;
- if ((aa - bb) > -3)
- {
- sprintf ("Passed aa-bb=%d", aa - bb);
- } ///if (aa-bb>-3)
- else
- {
- sprintf ("Failed aa-bb=%d", aa - bb);
- }///if (aa-bb>-3)
复制代码
下面这个程序也是输出Failed.
ps. 乡党,周至还是户县的?
- #include <stdio.h>
- int main(void)
- {
- if (4UL > -3) {
- printf("Passed
");
- }
- else {
- printf("Failed
");
- }
- return 0;
- }
复制代码我之前以为会先自动转换成有符号的再比较,今天入了这个坑也就记下了
一周热门 更多>