语句
C语言中有很多的语句:空语句、表达式语句、代码块、if语句、while语句、break和continue语句、for语句、do语句、switch语句、switch中的break语句、default子句、goto语句。
基本上,C语言实现了其他现代高级语言所具有的所有语句。
if语句
在C的if语句和其他语言的if语句中,只存在一个差别:就是C不具备布尔类型,而是用整型来代替。
对于if-else配对的问题,else字句从属于最靠近它的不完整的if语句。
break和continue语句
在while语句中,使用break语句可以永久终止循环,而使用continue语句,用于永久终止当前的那次循环。这两条语句的任何一条如果出现于嵌套的循环内部,它只对最内层的循环起作用,你无法使用break或者continue语句影响外层循环的执行。
while语句的执行过程
有时while语句在表达式中就可以完成整个语句的任务,于是循环体就无事可做,此时单独用一行表示一条空语句是比较好的做法,比如:
1 | while((ch = getchar() ) != EOF && ch != ‘\n’) |
for语句
for语句的形式为:
1 | for (expression1; expression2; expression3) |
其中expression1称为初始化部分,expression2称为条件部分,expression3称为调整部分。
与上述for语句相同意义的while语句:
1 | expression1; |
从上面两个语句的对比,我们可以看出,for循环有一个风格上的优势,就是把所有用于操纵循环的表达式收集在一起,放在同一个地点,便于寻找。
do语句
当你需要循环体至少执行一次时,选择do语句。
switch中的break语句
switch语句中的执行中遇到了break语句,执行流就会立即跳到语句列表的末尾。而break语句的实际效果是把语句列表划分为不同的不同,这样,switch语句就能够按照更为传统的方式工作。其实如果这样的话,那么最后一个语句就不用添加break了,但是还是加上了break,主要是在以后的维护中,如果维护人员添加代码而忘记了break就有可能影响程序的效果。
default子句
对于switch中的default语句,我一直认为要放在最后,但是测试了一下,发现default可以出现在任何一个case标签出现的地方而不仅仅是最后。
switch语句的执行过程
对于符合多个case的情况,最好写上注释,防止在检查的时候额外加上了break而导致出现bug。
goto语句
goto语句可以出现在函数中的任何一个位置,这种无序的跳转是很危险的,所以,如果有其他方法搞定,最好少用goto语句。
当然,针对跳转出多层嵌套,goto确实是一种比较方便的方法。当然可以使用一个标志值,来跳转出所有的循环,或者将所有的循环放在一个函数中,直接使用return来跳出。对于设置标志值,例如:
1 | enum {EXIT,OK} status; |
总结
另外还需要注意:C并不具备任何的输入输出语句,IO是通过调用库函数实现的,C也不具备任何异常处理语句,它们也是通过调用库函数来完成的。