Lobsters | 📄 原文链接 | 2026-10-29 收录

C 里用 goto 做错误处理,其实很体面

来源:thestateofinahaze.net — 2026-10-25

📋 概述

作者从 Go 和 Zig 回到 C,最不适应的就是错误处理没有 defer 与 errdefer 兜底。他先展示 Go 的 defer 加 errors.Wrap 有多省事,再展示 Zig 在手动内存管理下用 errdefer 按序回收、并配合「先预留」模式在分配全部完成后写 errdefer comptime unreachable。然后在 C 里,他最初为每次失败写嵌套的清理循环,越写越丑,还因为一个小于等于写错下标而容易出错。转折点是读 John Carmack 关于内联代码的邮件,让他意识到可以用 goto 把清理代码集中成一条线性路径。

🔑 核心要点

💡 金句

It is Friday after all, so I'll offer this little glimpse as an example from what I do at work…
← 返回 Lobsters 首页