<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>代码审查 on Yun 的个人博客</title><link>https://yun7211.github.io/tags/%E4%BB%A3%E7%A0%81%E5%AE%A1%E6%9F%A5/</link><description>Recent content in 代码审查 on Yun 的个人博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 18 May 2026 11:40:00 +0800</lastBuildDate><atom:link href="https://yun7211.github.io/tags/%E4%BB%A3%E7%A0%81%E5%AE%A1%E6%9F%A5/index.xml" rel="self" type="application/rss+xml"/><item><title>C 代码审查清单</title><link>https://yun7211.github.io/c-language/debug-quality/code-review-checklist/</link><pubDate>Mon, 18 May 2026 11:40:00 +0800</pubDate><guid>https://yun7211.github.io/c-language/debug-quality/code-review-checklist/</guid><description>&lt;h2 id="审查目标"&gt;审查目标
&lt;/h2&gt;&lt;p&gt;C 代码审查不是挑风格问题，而是提前发现运行时成本最高的问题：内存错误、资源泄漏、接口歧义、错误路径遗漏和不可测试的全局状态。&lt;/p&gt;
&lt;h2 id="接口语义"&gt;接口语义
&lt;/h2&gt;&lt;p&gt;先看函数接口是否清楚：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;参数能否为 &lt;code&gt;NULL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;返回值如何表达错误&lt;/li&gt;
&lt;li&gt;调用方是否负责释放资源&lt;/li&gt;
&lt;li&gt;输出参数失败时是否有效&lt;/li&gt;
&lt;li&gt;函数是否修改传入缓冲区&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;接口语义不清楚时，后续实现再漂亮也容易出问题。&lt;/p&gt;
&lt;h2 id="内存和边界"&gt;内存和边界
&lt;/h2&gt;&lt;p&gt;重点检查长度、容量和生命周期：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;字符串空间是否包含 &lt;code&gt;\0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;memcpy&lt;/code&gt;、&lt;code&gt;snprintf&lt;/code&gt;、数组下标是否有边界&lt;/li&gt;
&lt;li&gt;释放路径是否覆盖所有失败分支&lt;/li&gt;
&lt;li&gt;指针释放后是否还会被访问&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="错误路径"&gt;错误路径
&lt;/h2&gt;&lt;p&gt;C 项目里很多 bug 只在异常路径出现。审查时要刻意走失败分支：申请失败、文件打开失败、设备不存在、协议字段不合法、部分初始化后返回错误。&lt;/p&gt;
&lt;h2 id="小结"&gt;小结
&lt;/h2&gt;&lt;p&gt;好的代码审查清单能把经验固化下来。每次发现新问题，都应该把它变成下一次能提前检查的条目。&lt;/p&gt;</description></item></channel></rss>