关于包含.c和.h文件的疑惑

时间:2016-08-05 15:42:57

标签: c include

最近我一直在使用带有Cortex-M4芯片的TIVA C系列启动板。我使用Code Composer Studio作为我的IDE。

现在有很多混乱,因为通过反复试验,我发现为了使用芯片制造商提供的某些功能,我需要包含.c文件而不是包含.h文件。

这让我措手不及,我承认在编译器设计方面我不是专家程序员或专家。但有没有人知道为什么编译器需要.c文件而不需要.h文件?

.h文件仍在使用,因为它有.c文件所需的定义。

也许更好的问题可能是:

当有.h文件和.c文件时,您是否在代码中包含.c文件或是否包含.h文件?

我的试错练习告诉我你必须包含.c文件,但我完全不知道实际规则是什么。

很抱歉,如果这部分内容过于模糊。我完全可以分享我的main.c文件,这样你就可以看到我是如何包含这些文件的,但我觉得我的问题更多的是关于当有.h和a时包含文件的一般规则是什么的问题.c文件。

感谢您随时帮助我了解此问题。

编辑:为什么选票下降?我想到这里寻求帮助的是这个地方的意思吗?

1 个答案:

答案 0 :(得分:2)

重要的是要了解基本上所有C程序都是从多个源文件构建的。在某些情况下,许多源代码被预编译到一个或多个库中,但构建C程序通常还涉及构建多个C源文件并将它们相互链接并连接到适当的库以产生最终结果,这是很常见的。

同样重要的是要理解尽管C允许函数和文件范围变量的多个兼容声明,但它只允许每个不同函数或变量的一个定义在整个计划中。这是将声明放入头文件(通常以.h扩展名命名)的约定的主要原因。对给定程序有贡献的任意数量的源文件可以#include相同的头文件,但最多其中一个可以#include包含相应定义的源文件,然后仅当该文件是不直接包含在构建中。

可以编写主源文件,使其#include直接包含所有需要的定义的.c文件,在这种情况下,不必包含标题,但是你如果生成重复的函数定义,则不能有两个单独的源文件执行相同的程序。最终,这种方法也可能失败,因为给定编译器可以管理的源文件的大小和复杂程度可能存在限制。

如果芯片制造商的C源文件附带了头文件,那么您自己的源文件应该只包含那些头文件。您应该能够很好地从这些源构建目标文件。但是,要构建可执行程序,还必须构建芯片制造商的C源,并将它们链接到您自己的C源。创建一个包含芯片制造商来源的库并将其链接起来是明智的,但它也可以直接为每个程序构建所需的源文件。您的IDE应该支持这两个选项。