栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言:goto语句】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言:goto语句】

阅读有关C的书籍,我们经常看到书中提到在c语言中尽量避免使用goto语句,最好不要使用goto语句,但是我认为存在即合理,适当使用也未尝不是一件好事。

我们先来对goto语句做一个简单的了解

goto语句有俩部分:goto语句 + 标签名

goto语句作用:

1.跳出多重循环(break,continue只能跳出本次循环;
2.使用goto语句可以进行错误处理;

接下来依次用代码来演示

1.跳出多重循环

//跳出多重循环
#include
int main()
{
	int i,j,k,z;
	for(i=0;i<100;i++)
	{
		for(j=0;j<10;j++)
		{
			for(k=0;k<10;k++)
			{
				for(z=0;z<10;z++)
				{
					//不满足条件时
					goto part;
				} 
			}
		}
	}
	return 0;
part: 
	printf("this is a goton");
}

当然这里如果不使用goto语句,也可以使用return 0;或者exit(0)来结束函数也是可以的。

2.进行错误处理

//使用goto语句进行错误处理
int main()
{
 //2.bind the local computer address and port
 int ret = bind(server_sockfd,(struct sockaddr*)&myaddr,sizeof(myaddr));
 if(ret < 0){
	perror("bind exist error");
	goto err;
 }

 //3.set listen socket
 ret = listen(server_sockfd,8);
 if(ret < 0){
	perror("listen exist error");
	goto err;
 }
 printf("start listening...n");
 
 //4.receive client connent and produce new socket
 struct sockaddr_in client_addr;
 socklen_t cliaddr_len = sizeof(client_addr);
 int connfd = accept(server_sockfd,(struct sockaddr*)&client_addr, &cliaddr_len);
 if(connfd < 0){
	perror("accept exist error");
	goto err;
  }
    return 0;
        
//goto jump
err:
	close(server_sockfd);
 	return -1;
}

这应该是goto语句最有用的部分(个人感觉),拿上面的代码举例(socket通信代码的一部分),我们在写代码的时候肯定希望我们的代码没有任何错误,可是真真好的代码不可能做到没有错误,而是对错误的处理做到完美的处理,使用goto语句可以对错误集中管理,节省代码量。比如同一类型的错误可以使用同一个标签,直接goto到相应的标签即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/989849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号