NASA/JPL可靠软件实验室(开发用于宇宙飞船和航空器的软件)列出的主要针对C

又仁看科技 2025-02-16 11:17:21

NASA/JPL可靠软件实验室(开发用于宇宙飞船和航空器的软件)列出的主要针对C语言的10条开发规则:

规则一:限制所有代码使用非常简单的控制流结构 - 不要使用 goto 语句、setjmp 或 longjmp 结构,以及直接或间接递归。

规则二:所有循环都必须有固定的上限 - 必须能够静态地证明循环的迭代次数有一个预设的上限。如果无法静态证明循环上限,则违反此规则。

规则三:初始化后不要使用动态内存分配 - 在初始化阶段之后,禁止使用如 malloc 等动态内存分配函数。

规则四:函数长度应限制在单页纸的范围内 - 函数长度不应超过可以在标准参考格式的单页纸上打印的长度,通常意味着不超过约60行代码。

规则五:代码的断言密度平均应达到每个函数至少两个断言 - 使用断言来检查不应在实际执行中发生的异常情况。断言必须无副作用,且定义为布尔测试。

规则六:数据对象必须在其最小可能的作用域内声明 - 尽可能缩小数据对象的作用域。

规则七:非 void 函数的返回值必须被每个调用函数检查,参数的有效性必须在函数内部检查 - 所有非 void 函数的返回值都应该被检查,并且函数内部需要验证输入参数的有效性。

规则八:预处理器的使用必须限制在包含头文件和简单宏定义 - 禁止使用 token pasting (标记粘贴), 变量参数列表 (省略号) 和递归宏调用。宏必须扩展为完整的语法单元。条件编译指令也应谨慎使用。

规则九:指针的使用应受到限制 - 最多允许一级指针解引用。指针解引用操作不能隐藏在宏定义或 typedef 声明中。不允许使用函数指针。

规则十:所有代码必须从开发的第一天起就编译,并启用编译器最严格的警告设置 - 所有代码必须在最严格的警告设置下编译且没有任何警告。代码需要每天使用至少一个(最好是多个)先进的静态源代码分析器进行检查,并应通过所有分析且没有警告。

当然如果你用rust重写,那规则6-10已经基本不用担心了。rust会帮你搞定。

0 阅读:0
又仁看科技

又仁看科技

感谢大家的关注