我们在编写循环体的时候,可以通过使用break语句和continue语句,使得循环控制更加灵活。break语句是完全从循环中跳出,continue语句只结束本次循环。换句话来说,break的作用就是跳出循环,continue的作用就是加速循环。
break在循环体中的应用
break语句一般用于switch/case的分支结构中,它可以使程序跳出switch而执行switch以后的语句。如果没有break语句,则循环体将成为一个死循环而无法退出,所以我们基本上不会这么做;如果某个在case结束的时候,没有break,那么当这个case执行完成后,会立即进入下一个case继续运行。所以有时候我们会利用这个特性,去归并那些需要做相同处理的case。比如,在汽车诊断协议中,某些特殊的诊断服务,
switch (ReqBox[REQ])
{
case 0x01:
case 0x03:
......//服务0x01和0x03的处理
break;
case 0x02:
case 0x04:
......//服务0x02和0x04的处理
break;
}
当break语句用于循环语句中时,可使程序终止循环而执行循环后面的语句。通常break语句总是与if语句连在一起,即满足条件时便跳出循环。这种方法在数据查询比较中,常常被用到。比如在车钥匙的序列号比较查询中,
for (i=0;i<N_RC;i++)
{
......
if ((REC[4] == KEY_SN[0]) && (REC[5] == KEY_SN[1])&&
(REC[6] == KEY_SN[2]) && ((REC[7]&0x0F) == KEY_SN[3]))
{
break;
}
......
}
只要找到能匹配上的序列号,就可以立即去做后续功能响应了,而不需要遍历所有的序列号。从而提高了代码响应效率。
另外,break语句使用的时候,还需要明确以下两点:
1、break语句对if/else的条件语句不起作用。
break语句是退出循环,不是退出if/else条件。
2、在多层循环中, 一个break语句只向外跳一层。
一个break语句是不能跳出嵌套循环的,如果需要这样做那只能用goto语句。
continue在循环体中的应用
continue语句的作用是跳过循环体中剩余的语句,而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,也是与if条件语句一起使用,用来加速循环。
比如,在LIN通信里,
for (i=0;i<L_ID_TOTAL;i++)
{
......
if (L_IDVal[i] == 0x3C)
{
continue;
}
......//数据信号处理
}
针对普通数据帧需要做数据处理,但是对于ID为0x3C的命令帧就没有数据处理的需求,直接加速进入下一次循环就可以了。
小结
因此,我们可以看出来,break语句和continue语句在循环体中,一般不会影响到程序的实际运行结果。但是,对于提高程序的运行效率,还是很有好处的。