return 语句return语句的作用是提供整个函数的返回值,并结束当前函数,返回被调用的地方。也可以在没有返回值的函数中使用return语句。例如,当检测到错误时,会提前结束当前函数
return 语句
return语句的作用是提供整个函数的返回值,并结束当前函数,返回被调用的地方。也可以在没有返回值的函数中使用return语句。例如,当检测到错误时,会提前结束当前函数的执行,并返回以下内容:
int check_num(int num) { if ((num < 1) || (num > 12)) { printf("invalid number!\n"); } return num; }
返回值的函数相当于定义了一个与返回值同类型的临时变量,用return后的表达式初始化。
while 语句
与if语句类似,while语句由一个控制表达式和一个子语句组成,子语句可以是由几个语句组成的语句块。
Statement = = >: While(控制表达式)语句
如果控制表达式的值为真,则执行子语句,然后再次测试控制表达式的值。如果为真,则再次执行子语句,并再次测试控制表达式的值。这个控制过程叫做循环,子语句叫做循环体。如果某个测试控制表达式的值为false,则跳出循环,执行下面的return语句。如果第一个测试控制表达式的值为false,则直接传递给return语句,循环体不执行一次。
do/while 语句
do/while语句的语法是:
Statement = = >:语句do while(控制表达式);
while语句在执行循环体之前测试控制表达式的值,而do/while语句在测试控制表达式的值之前执行循环体。如果一开始控制表达式的值为false,while语句的循环体将不会执行一次,而do/while语句的循环体在跳出循环之前仍然必须执行一次。
for 语句
for语句的语法是:
For(控制表达式1;控制表达式2;控制表达式3)语句
int factorial(int n){ int result = 1; int i; for(i = 1; i <= n; ++i) result = result * i; return result;}
表达式++i等价于i = i+1,++和++称为前缀自动递增运算符。–被叫前缀减量运算符,–I相当于i = i & # 82111。
+和—运算符也可以用在变量之后,比如i++和i & # 8211为了与前缀运算符相区别,这两种运算符称为后缀自增运算符和后缀自减运算符。
break 语句和continue语句
break语句的一个用途是跳出switch语句块,这个语句也可以用来跳出循环体。continue语句也将终止当前循环。与break语句不同,continue语句终止当前循环,然后返回到循环体的开头,为下一个循环做准备。对于while循环和do/while循环,在执行continue语句后测试控制表达式;如果值为真,继续执行下一个循环;对于For循环,在执行continue语句后,首先计算控制表达式3,然后测试控制表达式2。如果值为真,继续执行下一个循环。
#include <stdio.h>int main(void){ int i = 0; int j = 0; for (i=1; i<=9; i++) { for (j=1; j<=9; j++) { printf("%d\t", i*j); } printf("\n"); } return 0;}goto 语句
如果在嵌套循环中遇到错误条件,需要立即跳出最外层循环进行错误处理,可以使用goto语句。
for (...) for (...) { ... if (error) goto ERROR; }ERROR: handle error;
错误:这里称为标签。任何语句前面都可以有几个标签,每个标签的命名都要遵循标识符的命名规则。
Goto只能跳转到同一个函数中的某个标签,不能跳转到其他函数。
与标签相关的语法规则如下:
语句= = >:标识符:语句
语句= = >: Case表达式:语句
语句= = >:默认值:语句
c库函数setjmp和longjmp可以一起在函数间跳转,但只能从被调用的函数跳回其直接或间接调用方(同时从stack 空)弹出一个或多个堆栈帧,不能从一个函数跳转到另一个与之无关的函数。Setjmp/longjmp函数主要用于错误处理,比如函数A调用函数B,函数B调用函数C,如果C出现错误情况,使得函数B和C继续执行没有意义,可以利用setjmp/longjmp机制快速返回函数A进行错误处理。