使用#include "component.c" 是否被认为是不好的做法,或者是否存在任何违反 misra 标准规则的情况? (可能是规则 3-3-1)
到目前为止,我了解到它通常被归类为不良做法,但可以在某些场景中使用,对于安全关键型应用程序是否有任何特别关注?
Misra 规则 3-3-1 指出具有外部链接的对象或函数应在头文件中声明
当你编写这样的程序时,它被称为 unity build。这种程序的一个很好的例子是 Odin 编程语言 的编译器。所以它可以做到,但就像其他任何事情一样,需要权衡取舍。
它将更多源代码放入单个翻译单元中。这有助于优化,类似于链接时优化的工作方式,因为编译器实际上可以从其他 C 文件中的函数中看到源代码。
项目文件中的混乱更少(标题更少),因此重复更少。
大大简化的构建;即使项目中有很多文件,它也可能像只构建一个文件一样简单。
使用更常见做法的同事更难理解。
您不能再在 C 文件中定义具有非常通用名称的静态变量,因为该 C 文件可能是更大翻译单元的一部分。你会得到更冗长的变量名。
它通常会减慢构建速度。构建系统(如 make)可以通过仅重新编译依赖于所有更改的内容来加快编译速度。如果您将事物组合成一个翻译单元,则整个事物都需要为每次更改构建。在一个大项目中,这将导致在构建过程中消耗更多的内存。
你不能并行构建。
其实我也不知道,不过不违反你发的规则:
Misra 规则 3-3-1 指出具有外部链接的对象或函数应在头文件中声明
通过包含 C 文件,您知道不再有外部链接,因为它们在同一个翻译单元中。
从您可能不想提供代码的角度来看,这也是一个安全问题,因此您只需提供标头和目标文件