wanyisq 发表于 2018-4-2 14:05:31

C语言调试时遇到的if语句不成立,但是可以执行

在调试板子时,遇到的现象。
if语句判断,并不成立。ret的值是0,但是if(1==ret)语句却可以执行。这是什么情况。大家有碰到过的吗。指教一下

bargagebaobei 发表于 2018-4-2 14:16:05

我经常遇到这种情况 不知道为什么 但是奇怪的是最后并不影响我的判断结果

流水源 发表于 2018-4-2 14:23:48

应该是编译器优化的原因。看看汇编代码就知道了。估计是那条代码在其他地方还有。

wenyangzeng 发表于 2018-4-2 14:30:17

1、降低优化等级;
2、ret定义为uint32_t;

Angel_YY 发表于 2018-4-2 15:31:06

这个遇到过,应该是调试器的问题,有时候调试器显示的变量值更新不及时,你这个ret初始化为0的缘故,可以试试吧这个ret定义的时候初始化为一个其他值,看看是否这里显示的是初始化的值。

发表于 2018-4-2 15:36:48

编译器优化等级调到0

butterflyspring 发表于 2018-4-2 16:05:04

没遇过,坐等答案..

QianFan 发表于 2018-4-2 16:23:36

volatile 吧

不吃肉的羊 发表于 2018-4-2 17:24:17

file:///C:\Users\CJ\AppData\Roaming\Tencent\Users\2839084093\TIM\WinTemp\RichOle\OAW@659P72I07P04D}VJ73X.png
这里选为0.就不会进去了

stm1024 发表于 2018-4-2 18:00:52

首先看他初始化没有,再看看这个值怎么来的?受到硬件影响大吗,要不要加上volatile?
页: [1] 2
查看完整版本: C语言调试时遇到的if语句不成立,但是可以执行