正确使用头文件?

时间:2012-08-13 22:58:04

标签: c file header

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

例如:

filea.c

#include "filea.h";

    methodA()
    {
        methodB();
    }

fileb.c

#include <somelibrary.h>
#include "fileb.h"


    methodB();
    {
        somelibrarycode();
    }

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

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

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

答案 2 :(得分:0)

必须以某种方式包含它们。

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

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

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

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

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