exit: 不是“函数提前返回”,它只是一个标签。
函数执行到结尾时,如果前面没 goto exit;,代码会自然顺序流到 exit: 这里,然后继续执行标签下面的代码。
你的这段结构等价于:
- 前面正常执行
- 如果中途出错,goto exit; 直接跳到统一收尾
- 如果中途没出错,也会顺着走到 exit:,执行同一段收尾逻辑
所以这里的 exit: 其实是“统一出口”。
你这段代码的执行路径是:
- 前面下载流程正常结束
- 代码走到 exit:
- 执行下面这段校验/上报/重启逻辑
如果前面有错误:
- goto exit;
- 直接跳到 exit:
- 执行同样的收尾逻辑
所以:
- 有 goto exit:跳过去
- 没有 goto exit:自然落到 exit:
- 两种情况最后都会执行 exit: 下面的代码
这也是 goto 常用于资源清理的原因。


254

被折叠的 条评论
为什么被折叠?



