[应用相关] 不知道能不能跳出来

[复制链接]
 楼主| zyf部长 发表于 2019-5-8 23:32 | 显示全部楼层 |阅读模式

while(1)
   {
     if(volsample==20)
     {
       volsample=0;
       break;
     }
   } //当volsample=20时,把它清零,同时跳出while循环。不知道能不能跳出来,因为有break在if语句中。。。volsample是在定时器中断里不停的累加
xxrs 发表于 2019-5-8 23:38 | 显示全部楼层
如果你的volsample在其它地方(中断或其它任务)有引用的话,可以跳出循环。
llljh 发表于 2019-5-8 23:41 | 显示全部楼层
volsample=0   在其它子程序中有的话就会跳到那个地方,但是while(1)还是不停检测volsample的
dingy 发表于 2019-5-8 23:45 | 显示全部楼层
volsample在哪里增1的啊?  
pengf 发表于 2019-5-8 23:49 | 显示全部楼层

break;能够跳出的是它所在的第一层循环;LZ的if( )不是循环结构。所以break不作用于if(),
而作用于while(1){ }。
renyaq 发表于 2019-5-8 23:52 | 显示全部楼层


break只能跳出最近的循环体,以我个人之见跳不出的。
supernan 发表于 2019-5-8 23:54 | 显示全部楼层

我自己也没有这么用过,break是能跳出最近的一个循环,如果程序要我来维护,我不保证我能准确判断。
houcs 发表于 2019-5-8 23:57 | 显示全部楼层
没问题,在其他任务中设置volsample等于20就可以退出。
ZhangStudy 发表于 2019-5-9 07:55 | 显示全部楼层
如果声明volsample没有加volatile修饰符,循环会被编译器直接优化成死循环。
brucewoo 发表于 2019-5-9 08:36 | 显示全部楼层
当然可以跳出。
volsample一定要定义成volatile,否则读取的很可能不是中断修改后的值。
戈卫东 发表于 2019-5-9 09:16 | 显示全部楼层
brucewoo 发表于 2019-5-9 08:36
当然可以跳出。
volsample一定要定义成volatile,否则读取的很可能不是中断修改后的值。 ...

否则会被当成0,直接优化消除这个判断,按0的结果生成代码。。。
戈卫东 发表于 2019-5-9 09:17 | 显示全部楼层
他这个就可能成为一个死循环
gongche 发表于 2019-5-9 22:18 | 显示全部楼层

你就是:
while(1){
   if(a){
       if(b){
         if(c){
             break;
         }
     }
   }
}
,只要能运行到break,也啪的一声跑出去了
huwr 发表于 2019-5-9 22:20 | 显示全部楼层

这个要看这段代码在你的全部程序代码中的位置而定吧
zhuhuis 发表于 2019-5-9 22:23 | 显示全部楼层
continue,break是跳出最近的一层循环,跟if没有关系。不只是while,就是for也照常可以跳出。
xxrs 发表于 2019-5-9 22:26 | 显示全部楼层
最好用>=20吧。因为可能20那一刻程序没有走到这个位置。
xxmmi 发表于 2019-5-9 22:29 | 显示全部楼层

可以
bqyj 发表于 2019-5-9 22:33 | 显示全部楼层

条件成立就可以。
wenfen 发表于 2019-5-9 22:39 | 显示全部楼层

没跑一下试试?
chenho 发表于 2019-5-9 22:42 | 显示全部楼层

能够跳出循环。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

694

主题

7102

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部

694

主题

7102

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部