我们先来对goto语句做一个简单的了解
goto语句有俩部分:goto语句 + 标签名
goto语句作用:
1.跳出多重循环(break,continue只能跳出本次循环;
2.使用goto语句可以进行错误处理;
接下来依次用代码来演示
1.跳出多重循环
//跳出多重循环 #includeint 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到相应的标签即可。



