【发布时间】:2015-09-09 05:19:24
【问题描述】:
为什么将源文件包含到其他源文件中不是一个好习惯? 更好的方法是包含头文件。这种方法有什么好处,反之有什么缺点? 原谅我的英语不好。
【问题讨论】:
-
这样做没有意义。编译器将项目中的每个源文件作为一个独立的编译单元。一旦完成对给定单元的编译,它就会“忘记”所有先前的定义(宏、函数原型等)。如果在源文件中包含源文件,前者会被编译两次,其中所有的全局符号(函数和全局变量)都会被实例化两次,导致链接错误。
-
你做
#include源代码文件!虽然不是很合适,here 您可能会找到一个解释,为什么在标题中包含 definitions 是不好的做法(有一些例外)。 -
@barakmanos:混淆“源代码文件”和“输入文件”?请注意,该标准指的是“文件范围”,即整个编译单元,包括任何
#included 文件。另请注意,有实际上包含定义的好用例:例如,您要保留static的自动生成的表。或者 - 即使是普通的标题:inline函数。 -
@Olaf:顺便说一句,对于那些自动生成的表格,您可以使用
extern而不是包含源文件。 -
@Olaf:如果您声明自动生成的表
static并在多个位置包含源文件,那么您会创建该表的多个副本。这可能会非常浪费,尤其是在您刚刚提到的嵌入式系统中。
标签: c code-organization