goto语句的使用

以下情况下,可以考虑用goto语句:

1、从多重循环中直接跳出 ;
2、出错时清除资源;
3、可增加程序的清晰度的情况。
注意:我们应该尽量避免使用goto语句。因为不加限制地使用goto语句,会破坏清晰的程序结构,会使程序的可读性变差,甚至成为不可维护的"面条代码"。经常带来错误或隐患,比如它可能跳过了某些对象的构造,变量的初始化,重要的计算等语句。

以下用第二点‘出错时清除资源’的情况做个例子

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>


int main(void)
{
        int fd = -1;
        char * buf = NULL;
        int file_len;
        int read_len;
        fd = open("/home/trd/C_C++_test/fpversion.txt",O_RDWR);
        if( fd < 0 )
        {
                puts("FILE OPEN FAILED\n");
                exit(-1);
        }
        file_len = lseek(fd,0,SEEK_END);
        buf = (char *)malloc(file_len);
        if(buf == NULL)
        {
                puts("malloc failed");
                goto FD_ERROR;
		}
        lseek(fd,0,SEEK_SET);
        read_len = read(fd,buf,file_len);
        if(read_len != file_len)
        {
                puts("diffrent length for reading");
                goto MALLOC_ERROR;
        }
        printf("fpversion:%s\n",buf);
/*这里注意:1.执行了goto语句,不会再执行该goto语句往下的代码块
		   2.未执行goto语句,代码会按照顺序往下执行包括标签下的代码块
*/
MALLOC_ERROR:
        if(buf)
        {
                puts("free space");
                free(buf);
        }else
        {
                printf("buff is NULL\n");
        }
FD_ERROR:
        if(fd > 0)
        {
                puts("malloc faile,close file");
                close(fd);
                fd = -1;
        }
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值