摘要:/*转到语句*/#include #include #include<string h>/*goto语句也称为无条件转换语句,其一般格式如下:goto语句标签;语句标签是根据标识符的规定编写的符号,置于句子行前面,后跟冒号(:)。语句标签用于标识语句,并与goto语句一起使用*//*“然而,在结构化程序设计中,通常不建议使用goto语句,以避免程序流程的混乱以及理解和调试程序的困难。然而,goto有其自身的局限性,只能是当前函数。
/* goto语句 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号,
放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
*/
/*
"但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。"
所有goto说明都有类似提示,但是个人感觉goto还是很有用的
*/
int handle(int num)
{
return num;
}
//goto基本用法
void test1()
{
int errCode = 0;
//业务1
errCode = handle(1);
if (errCode)
{
goto err;
}
//业务2
errCode = handle(1);
if (errCode)
{
goto err;
}
printf("-----ok----
");
return;
err:
//资源释放处理
printf("program is error .
");
}
/*
goto作用域说明
标签本身没有作用域的,只是一个标志点。
但是goto本身有限制,只能是当前函数。所以,从这个角度来说,标签的作用域也可以说是当前函数。
*/
void test2()
{
int errCode = 0;
errCode = handle(1);
if (errCode)
{
//goto err; error C2094: 标签“err”未定义
}
}
int main()
{
test2();
printf("-----ok------
");
getchar();
return 0;
}
/* do{ ... }while(false)妙用 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
goto在函数有多个返回分支,部分或全部返回分支返回前需要做一些额外的工作(如释放内存等)场景很有作用
但是goto是跳转,在c++编程中,如果变量定义在goto语句后面就会报错(变量未定义)
do{ ... }while(false)就是一种取代goto的方法
*/
int handle(int num)
{
return num;
}
//do while 使用
int test1()
{
int errCode = 0;
do
{
//业务1
errCode = handle(1);
if (errCode)
{
break;
}
//业务2
errCode = handle(1);
if (errCode)
{
break;
}
//做需要执行的操作
} while (0);
//资源释放处理
return errCode;
}
int main()
{
test1();
printf("-----ok------
");
getchar();
return 0;
}