C++中GoTo语句的合理利用

描述:经常在写程序时,如果操作流程很长,每一部都需检查错误,如果这样将会发现,程序中很多地方需要关闭句柄回收资源等,将会重复性地去回收资源。 解决办法:使用GoTo在函数结尾处进行一次回收。此处可以将错误信息统一放在此处输出

	
	if (bDoBackupEncFile)
{bSuccess = recoveryManager->EarseRecoveryFile(recoveryFileNew);if (!bSuccess){nErrorCode = 19;goto ErrCleanUp;}}


以上出现错误设置一个错误代码,然后使用跳转至指定标签


ErrCleanUp:
	{
		if (INVALID_HANDLE_VALUE != hFile)
		{
			CloseHandle(hFile);
		}
		if (NULL != recoveryManager)
		{
			recoveryManager = NULL;
		}
		if(NULL != recoveryFileNew)
		{
			recoveryFileNew = NULL;
		}
		if (NULL != recoveryFile)
		{
			recoveryFile = NULL;
		}
	
		char szHint[1024];
		memset(szHint,0,1024);
		switch (nErrorCode)
		{
		case 0:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:打开文件失败",nErrorCode);
			break;
		case 1:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:创建恢复管理器失败",nErrorCode);
			break;
		case 2:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:获取文件属性失败或不支持",nErrorCode);
			break;
		case 3:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:文件头获取失败",nErrorCode);
			break;
		case 4:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:文件序列号不一致",nErrorCode);
			break;
		case 5:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:创建加密流程失败",nErrorCode);
			break;
		case 8:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:解密时备份加密单元失败",nErrorCode);
			break;
		case 9:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:重新计算加密单元失败",nErrorCode);
			break;
		case 10:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:解密前锁定文件失败",nErrorCode);
			break;
		case 11:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:解密加密单元时写失败",nErrorCode);
			break;
		case 12:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:解密加密单元时读失败",nErrorCode);
			break;
		case 13:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:加密单元或解密单元为空",nErrorCode);
			break;
		case 14:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:加密前对加密单元中数据进行备份",nErrorCode);
			break;
		case 15:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:加密加密单元时写失败",nErrorCode);
			break;
		case 16:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:加密加密单元时读失败",nErrorCode);
			break;		
		case 17:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:重写文件头失败",nErrorCode);
			break;
		case 18:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:清除解密备份失败",nErrorCode);
			break;
		case 19:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:清除加密备份失败",nErrorCode);
			break;		
		default:
			sprintf(szHint,"重新加密文件失败,错误代码:%d,原因:未知",nErrorCode);
		}


		g_objSysErrFile.DoLogMessage(szHint);


		return false;




	}


	return true;


在错误处理中,可以使用统一的输出方式,将错误信息输出,并对资源进行回收。



此方式的好处,在于,程序流程比较清析,代码的可读性较好。避免了重复判断资源回收。适合函数代码较长的程序。


核心思想,对错误信息的统一处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值