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语句在工作当中的用法的主要内容,如果未能解决你的问题,请参考以下文章

C语言中goto语句的用法??举例来说。

跳转语句 break;continue; return; goto 区别用法

Goto语句

程序员都是这样关机的

c++中的break,continue,goto语句

(转载)虚幻引擎3--UnrealScript教程章节一:19.return和goto