正确使用头文件?

最近我一直在使用头文件将我的程序拆分成单独的文件(包含函数和头文件的C文件声明它们)。 一切正常,但出于某种原因,我需要在每个C文件中包含 …或者我的项目无法编译。 这是预期的行为吗?

C模块需要知道如何定义某些内容,或者知道定义的位置。 如果定义位于头文件中,则应将其包含在使用它的模块中。 以下是有关头文件的信息的链接 。

答案取决于该函数是否可能依赖于其他.c / .h文件中的其他声明函数。

例如:

filea.c

 #include "filea.h"; methodA() { methodB(); } 

fileb.c

 #include  #include "fileb.h" methodB(); { somelibrarycode(); } 

除非filea.c包含filea.c的头文件,否则这将无法编译,因为它具有一些未解析的外部依赖项。

如果这不是你所描述的,那么就会发生其他一些麻烦,或者你不小心静态输入了函数,使它们无法在.c文件之外被看到。

这个问题的一个可能的解决方案是将一个shared.h与其他所有包含在一起,但我个人不推荐这个,因为这只是掩盖了问题,而不是明显地使哪些文件依赖于什么并建立清晰的线条依赖。

它们必须以某种方式包括在内。

有些项目需要在.c文件中包含长列表,可能需要强制排序,甚至强制假设没有标题包含任何其他标题。

有些允许假设某些包括形成一些标题。

有些人使用集合标题(包括小标题列表)并用这些标题替换长列表。

有些甚至更进一步,使用编译器的“强制标头”选项,因此包含不会出现在任何地方,并声明内容是隐式假设的。 它可以在项目或整个代码库级别上进行,也可以组合使用。 它与预编译头文件相当好。

(还有更多的策略,你得到的数字,都有一些优点和缺点。)