您如何确保您作为程序员具有书面质量的C代码?

lin*_*ist 8 c software-quality

我想写一些高质量的C代码.有人能指点我一些文章,网站......无论我需要什么样的东西都有例子.我已经看过并阅读过K&R C书.

但时代已经改变,有些人必须对质量C代码有更多的说法.另一个重要的事情是你如何确保你作为程序员有书面质量的C代码?

Wou*_*ick 11

有人提到了一些编译器开关,但具有语法平滑的代码并不能确保高质量的最终产品,因为软件质量要高于此.

有几种软件质量分类,但这里有一个列表,您可以将其用作清单:

  • 正确性(它是否符合规范?)
  • 可靠性(用户可以依赖它吗?)
  • 稳健性(在意外情况下是否有效?)
  • 性能(它是否足以让用户快速完成工作?)
  • 可用性(用户友好吗?)
  • 可验证性(可以轻松验证其属性吗?)
  • 可维护性(可以轻松修改吗?)
    • 可修复性(可以在合理的时间内修复缺陷吗?)
    • 可演化性(可以简单地添加新功能吗?)
  • 可重用性(代码可以在其他项目中轻松使用吗?)
  • 便携性(它可以在不同环境中轻松运行吗?)
  • 可理解性(可维护者容易理解吗?)
  • 互操作性(它的合作程度如何?)
  • 生产力(效率和高效交付)
  • 及时性(按时交付的能力)
  • 可见性(所有步骤都清楚地记录了吗?)

  • 他特别要求代码质量,而不是软件质量。但是+1仍然有效-许多积分仍然有效... (2认同)

Chr*_*oph 10

在编译器中启用警告.使用gcc,我使用这些标志:

-std=c99 -pedantic -Wall -Wextra -Werror -Wmissing-prototypes
-Wmissing-declarations -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings
-Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wconversion
-Wstrict-prototypes
Run Code Online (Sandbox Code Playgroud)

如果您的代码无法更改为不产生警告,请删除-Werror或不使用产生警告的特定标志.

  • 这可能会导致语法正确的代码,而不是质量方面的代码。 (2认同)

Dav*_*kle 7

传统上,人们使用棉绒来帮助解决这个问题.


Ric*_*son 5

使用静态分析工具,传统上称为 lint,但我使用了很好的夹板。请参阅此问题中的建议。我个人建议启用警告并修复它们。

从规则上来说

  • 不要信任输入数据 - 验证所有内容、大小、类型、内容。
  • 防止缓冲区溢出 - strcat 和许多其他内容并不安全。
  • 请使用单元测试,ddj 文章
  • 请让其他人审查您的代码
  • 不要做出假设。
  • 确保函数简短,并彻底测试每个函数。
  • 使用有意义的名称。
  • 编写可读的代码。
  • 不要偷懒——如果你需要改变某件事以使其更有意义,那么宜早不宜迟。

编辑:特定于 C,此C 陷阱列表是必读的,即使它是针对 C++ 的,也值得阅读CERT C++ 安全编码标准