goto语句在工作当中的用法
Posted 代二毛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了goto语句在工作当中的用法相关的知识,希望对你有一定的参考价值。
前言
goto语句在C语言编程中是比较少用的,在学习C语言时老师也告诉要少用,有的甚至说别用。后来再工作当中,看到了前辈写的代码里用了goto语句,顿时感到goto语句的精妙,遂在此记录。goto语句能使用,不过要慎用,应为C语言的代码中大多是顺序结构和循环,这是便于理解的,goto语句是强制跳转语句,打破了顺序结构和循环结构,让程序跳转不利于理解,如果使用不当会导致程序出现问题而且不易查觉。
goto的简单介绍
goto是强制跳转语句,使用goto语句后,程序就会跳转到指定程序处执行。在程序中要使用标号,具体格式是"名字+:",比如"exit:"使用goto语句:goto exit; 就会跳转到exit处继续执行程序。
goto的使用实例
#include <stdio.h>
#define FAIL (-1)
#define OK (0)
int mutex_creat(void ** mutex);
int mutex_lock(void* mutex);
int mutex_unLock(void* mutex);
int fun1(void);
int fun2(void);
int fun(void)
{
int * p1, p2;
int status = 0;
static void * mutex = NULL;
//初始化
p1 = p2 = NULL;
//申请资源代码
p1 = (int *)malloc(sizeof(int) * 20);
p2 = (int *)malloc(sizeof(int) * 20);
if(NULL == mutex)
{
mutex_creat(&mutex);
}
#if 1
//功能代码:用goto语句
mutex_lock(mutex); //上锁
status = fun1();
if(FAIL == status)
{
goto exit;
}
status = fun2();
if(FAIL == status)
{
goto exit;
}
#else
//功能代码:不用goto语句
mutex_lock(mutex); //上锁
status = fun1();
if(FAIL == status)
{
free(p1);
free(p2);
mutex_unLock(mutex);//解锁
return status;
}
status = fun2();
if(FAIL == status)
{
free(p1);
free(p2);
mutex_unLock(mutex);//解锁
return status;
}
#endif
exit:
free(p1);
free(p2);
mutex_unLock(mutex);//解锁
return status;
}
代码解析:上面的代码时不完整的,主要是用来讲解goto语句在工作中的常见用法。fun函数包括变量定义、初始化、申请资源、实现的功能代码、退出等几部分。在fun函数中,无论是正常退出还是异常退出,都需要释放资源和解锁,否则会造成内存泄漏和死锁。如果不采用goto语句,那在每一处返回的地方都要写一遍释放资源和解锁的代码,这些代码都是重复的,会让程序显得臃肿。如果使用了goto语句,就只需要在最后处写上释放资源和解锁的代码,然后中途执行失败就跳转到此处退出函数,这样会显得代码简洁。
以上是关于goto语句在工作当中的用法的主要内容,如果未能解决你的问题,请参考以下文章