当前位置: 首页 > news >正文

【C】goto语句使用的两种方式

方式1:统一的错误处理,在函数中多个地方可能出现错误时,用goto跳转到同一个错误处理逻辑,避免代码重复。

int func() { if (操作1失败) { goto error; } if (操作2失败) { goto error; } // 正常逻辑 return 0; error: // 错误处理(如释放资源) return -1; }

方式2:统一的资源释放,避免重复代码,确保资源被释放。

#include <stdlib.h> #include <stdio.h> int func() { int* res1 = NULL; // 资源1:动态内存 FILE* res2 = NULL; // 资源2:文件句柄 int ret = -1; // 函数返回值(默认失败) // 申请资源1 res1 = malloc(100); if (res1 == NULL) { goto cleanup; // 失败则跳转清理 } // 申请资源2 res2 = fopen("data.txt", "r"); if (res2 == NULL) { goto cleanup; // 失败则跳转清理 } // 正常业务逻辑(假设执行成功) ret = 0; // 标记为成功 cleanup: // 统一资源释放点 // 释放资源2(后申请的先释放,避免依赖) if (res2 != NULL) { fclose(res2); } // 释放资源1 if (res1 != NULL) { free(res1); } return ret; // 返回执行结果 }
http://www.jsqmd.com/news/620093/

相关文章:

  • 分享一个超实用的Android Studio点菜系统成品项目
  • MFRC522--从寄存器配置到数据交互:一个嵌入式RFID读写器的完整驱动解析
  • mysql数据库死锁原因分析与预防_规范事务访问表的顺序
  • STM32CUBEMX实战指南(九):串口DMA高效收发与printf重定向优化
  • 如何通过智能工具实现高效信息管理:一站式RSS订阅解决方案指南
  • 高品质厨师刀供货商,钢材优质耐用防锈,为采购商提供卓越品质之选!
  • 从零开始搭建安全的学校网站认证系统
  • 代码之外周刊(第期):当技术让一切趋同,我们还剩什么?坠
  • gitlab详解
  • 基于VRIF 2.0与OpenXR:实现Pico串流开发与多平台一键部署
  • Svelte 与 SvelteKit 生态资源全解析:从入门到实战
  • 碳交易机制下考虑需求响应的综合能源系统优化运行 综合能源系统是实现“双碳”目标的有效途径
  • 2026新都装修公司口碑王炸榜:本地真实业主力荐,半包到整装避坑指南 - 推荐官
  • 我用 AI 辅助开发了一系列小工具():文件提取工具兆
  • Qwen3-VL-4B Pro实战:手把手教你搭建智能图片分析工具
  • XGBoost-原理推导(中):从目标函数到最优切分点
  • 2026年发泡水泥优质企业推荐榜:黄湖节能领衔,专业轻质水泥实力企业精选 - 海棠依旧大
  • 2026成都别墅装修口碑王炸榜!TOP10实力公司全解析,从设计到落地一篇搞定 - 推荐官
  • 2026评测:波光跳泉领域这些企业表现亮眼,市场评价高的波光跳泉生产厂家坤湛喷泉专注行业多年经验,口碑良好 - 品牌推荐师
  • 浏览器自动化六大技术路线深度对比:从模拟点击到 Chrome 扩展注入既
  • 海外项目实战:用uniapp搞定谷歌登录,绕过网络限制的纯前端方案(附完整代码)
  • 生物显微镜设计避坑指南:Zemax仿真中那些容易忽略的‘可制造性’细节
  • Windows下PostgreSQL 14安装失败?手把手教你解决‘Problem running post-install step‘错误
  • 2026年4月海口美兰半挂租赁买卖,文昌半挂技术实力与市场口碑领航者 - 品牌推荐师
  • 批量音频音量调整工具使用说明:固定增减分贝与目标响度两种模式怎么选
  • uniapp消息推送权限处理指南:如何优雅地引导用户开启通知权限
  • 深入解读ATPG Pattern类型:除了Basic Scan,Clock PO和RAM Sequential模式怎么用?
  • 从金牛奖到数据实验室:一家头部公募如何在数智化深水区重构投研生产力
  • MindSpore 环境配置完全指南雀
  • 别再为3D模型发愁了!用HelixToolkit.Wpf在WPF里加载并操控模型(附完整代码)