本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第3章,建议26,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
建议26:区别continue与break语句
在C语言中,continue语句和break语句的区别如下。
(1)对于continue语句
它只结束本次循环,而不是终止整个循环的执行。也就是说,在while循环、do/while循环和for循环中,continue语句将跳过循环体中剩余的语句而强制执行下一次循环,即结束本次循环,跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定,如下面的示例代码所示:
int main(void)
{
unsigned int i=0;
for( i=0;i<20;i++)
{
if (i%2==0)
continue;
printf("%4d",i);
}
printf("\n");
return 0;
}
在上面的代码中,为了演示continue 语句的作用,利用continue语句输出0到19之间不能被2整除的数。其中,当i能被2整除时,将执行continue语句,结束本次循环,并跳过尚未执行的printf("%4d",i) 语句,接着执行下一次循环与判断语句 if (i%2==0)。只有i不能够被2整除时才执行printf(“%4d”,i) 语句来输出结果,如图3-3所示。
(2)对于break语句
相对于continue语句,break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。也就是说,在分支结构程序设计中用break语句可以跳出switch语句块,继续执行switch下面的语句。而在while循环、do/while循环和for循环中,break语句用来终止本层循环,继续执行该循环外的语句。
现在,如果将上面示例代码中的continue语句修改成break语句结果会是什么呢?如下面的示例代码所示:
int main(void)
{
unsigned int i=0;
for( i=0;i<20;i++)
{
if (i%2==0)
break;
printf("%4d",i);
}
printf("\n");
return 0;
}
其实,从代码中可以看出,当for循环执行第一次循环时(即i的值为0),表达式0%2的值为0,因此,if (i%2==0) 语句返回真,从而执行break语句,终止整个for循环,最后程序什么都不输出。
最后还需要注意的是,break语句不能用于循环语句和switch语句之外的任何其他语句中。在循环语句中,break语句与continue语句一般与if语句一起使用。