这是我的热门评论的开头。
我已经克隆了你的开发仓库。
最终,我能够做一个make -i
. 输出大约是 500 行 [错误]。
因此,没有足够的错误来证明自动化脚本的合理性(即,当您将脚本提高到生产质量时,您可以在更短的时间内进行手动检查和修复)。
并且,应该检查一些错误是否存在逻辑错误,尤其-Wmaybe-unitialized
是您所关心的。现在可能是确定是否只是更改的好时机:int foobar;
进入int foobar = 0;
是可以的。如果是这样,那就是我会做的。(即)如果基于if
层次结构的代码在未初始化时从未真正使用过该值,则添加int foobar = 0;
只是告诉编译器向 STFU 一个非问题。
但是,它实际上可能是一个错误。如果采用警告所抱怨的代码路径。也许代码路径在实践中没有出现,但是,随着不同的输入数据[在未来],代码被执行。这将是一个 [潜在的] 错误。
至少,只需初始化= 0;
就会将不可预测的随机副作用变为可预测的副作用。如果函数失败,它现在将以一致/可预测的方式失败(而不是依赖于它在 [未初始化] 堆栈帧中获得的随机值)。
但是,这将是检查代码是否存在 [潜在] 错误的好时机。你会得到更多的 attaboys ;-)
许多错误是-Wunused-parameter
。通常,-Wno-unused-parameter
如果CFLAGS
已知代码有效,我会添加。IMO,在大多数情况下,这甚至都不是一个错误 [真实的、想象的或理论上的]——不使用参数并不是错误,只是对新手编写新代码的警告。如果你有一个函数签名,它有一个额外的参数,你必须保留它以实现向后兼容性,但替换函数不需要它,你会在这里得到一个误报。
对于-Wunused-but-set-variable
,我会删除声明和分配给它。对int result = important_function_that_changes_globals();
. 在那里,保留函数调用。替换为:important_function_that_changes_globals();
。或者,如果您必须 [而且,就我个人而言,我从不这样做]:(void) important_function_that_changes_globals();
但是,还有其他一些错误(例如)-Wstringop-truncation
表明 [可能] 缓冲区溢出。
子目录中的代码库src
[仅] 30,000 行。同样,只有大约 500 行错误消息。
根据我的经验,可以在 1-3 天 [最多一周] 内对错误进行分类。
但是,正如jarmod指出的那样,可能会有更严重的错误[仅在运行时调试中出现]。