- return 语句
return 语句的作用是提供整个函数的返回值,并结束当前函数返回到调用它的地方。在没有返回值的函数中也可以使用return 语句。例如当检查到一个错误时提前结束当前函数的执行并返回:
int check_num(int num)
{
if ((num < 1) || (num > 12))
{
printf(\"invalid number!\\n\");
}
return num;
}
函数返回一个值相当于定义一个和返回值类型相同的临时变量并用return 后面的表达式进行初始化。
- while 语句
和 if 语句类似,while 语句由一个控制表达式和一个子语句组成,子语句可以是由若干条语句组成的语句块。
语句 ==> while(控制表达式)语句
如果控制表达式的值是真,子语句就被执行,然后再次测试控制表达式的值,如果还是真,就把子语句再执行一遍,再测试控制表达式的值,这种控制流程称为循环(Loop), 子语句称为循环体。如果某次测试控制表达式的值为假,就跳出循环执行后面的return 语句,如果第一次测试控制表达式的值就是假,那么直接调到return语句,循环体一次都不执行。
- do/while 语句
do/while 语句的语法是:
语句 ==> do语句while (控制表达式);
while 语句先测试控制表达式的值再执行循环体,而do/while 语句先执行循环体再测试控制表达式的值。如果控制表达式的值一开始就是假,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 – 1。
++ 和 — 运算符 也可以用在变量后面,例如i++和i–, 为了和前缀运算符区别,这两个运算符称为后缀自增运算符和后缀自减运算符。
- 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;
这里的ERROR: 叫做标号,任何语句前面都可以加若干个标号,每个标号的命名也要遵循标识符的命名规则。
goto 只能跳转到同一个函数中的某个标号处,而不能跳到别的函数。
和标号有关的语法规则如下:
语句 ==> 标识符: 语句
语句 ==> case 常量表达式: 语句
语句 ==> default: 语句
C 标准库函数setjmp和longjmp 配合起来可以实现函数间的跳转,但只能从被调用的函数跳回到它的直接或间接调用者(同时从栈空间弹出一个或多个栈帧),而不能从一个函数跳转到另一个和它毫不相干的函数中。setjmp/longjmp函数主要也是用于出错处理,比如函数A调用函数B,函数B调用函数C,如果在C中出现某个错误条件,使得函数B和C继续执行下去都没有意义了,可以利用setjmp/longjmp机制快速返回到函数A做出错处理。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。