Rad*_*row 5 c code-organization
为什么将源文件包含到其他源文件中不是一个好习惯?更好的方法是包含头文件。这种方法有什么好处,反之亦然有什么缺点?请原谅我糟糕的英语。
如前所述,反对将 C 文件包含到 C 文件中的主要论点是多重定义错误的高风险。由于它是一种很少使用的技术,因此它会给代码维护人员带来意想不到的副作用。
当然,在非常特殊的情况下,包含 C 文件可能是两害相权取其轻。例如,如果要为静态 C 函数编写单元测试,则可以将 C 文件包含到带有单元测试的文件中。
另请参阅:如何测试静态函数
另一个不寻常但有效的用途是将类或函数模板与其定义分开(C++): https://isocpp.org/wiki/faq/templates#separate-template-fn-defn-from-decl
为什么将源文件包含到其他源文件中不是一个好习惯?
源文件包含定义。这些可能会导致多个定义错误,因此通常不应包含在其他源文件中。即使您通过仅编译包含其他源文件的文件来避免多重定义错误,代码也可能变得难以管理。
在头文件中,您只需向编译器引入一些符号并告知它们的类型。这允许您将接口与实现分开。
例如:
文件交流
int a = 42;
...
Run Code Online (Sandbox Code Playgroud)
文件bc
/* Example of bad code */
#include "a.c"
...
Run Code Online (Sandbox Code Playgroud)
当您编译a.c并b.c链接它们时,您将收到multiple definition链接器错误。
如果计划将多个源文件包含到一个文件中并编译该文件,则会引入大量污染(宏、静态函数等),这对于读者和编译器来说都不太容易管理。
ps 当我说一般性时,我的意思是有时包含源代码可能有用。但在这种情况下,为了避免读者感到困惑,我宁愿将文件后缀重命名为.c, may be.inc或类似的名称。