标头包含多个C文件

rah*_*hmu 5 c header-files

我有两个文件foo.c和bar.c,我单独编译gcc -c,然后链接.这两个文件都需要stdio.h和stdlib.h头文件.

我是否必须将它们包括在内?不觉得有点多余吗?我应该使用#ifdef吗?

什么是最佳做法?

ale*_*cov 17

每个C文件都是不同的翻译单元.换句话说,它是一个完整的独立程序,在语法上完整和正确.因此,每个C文件必须独立于任何其他C文件进行编译,并且必须包含它使用的每个标识符的每个声明,而不管这些声明是否也出现在其他C文件中.从编译器的角度来看,每个C文件本身都是一个完整的程序(尽管有未解析的引用).

按照惯例,头文件是包含必须出现在一组C文件中的声明的文件.头文件可以包含在预处理器中 - 这是在包含点进行简单的文本复制和粘贴 - 以避免手动复制翻译单元之间的声明.

总结:在不同的C文件中包含相同的文件并不是多余的 - 这是正式要求的.

(之后,您目标文件(只是较小的程序)链接到一个较大的最终程序.较大的程序大致是较小子程序的总和,所有引用都在它们之间解决.一般来说,链接阶段对此没有任何了解.生成结果对象文件的原始文件的语言结构.)