【问题标题】:Why only include header files (.h) but not the source file (.c) in the directives?为什么在指令中只包含头文件(.h)而不包含源文件(.c)?
【发布时间】:2022-01-18 04:58:37
【问题描述】:

编译器如何知道我所包含的源文件是哪个? 只要头文件和源文件的名称相同,它就可以工作吗? 例如,头文件 example.h 引用 example.c,那么包含 example.h 就足够了?

【问题讨论】:

    标签: c module header-files preprocessor compiler-directives


    【解决方案1】:

    编译器如何知道我包含的是哪个源文件?

    没有。编译器只知道你告诉它什么。头文件旨在告诉编译器其他地方存在什么。

    只要头文件名和源文件名相同就可以吗?

    没有区别。按照惯例,我们人类发现将它们命名为相同名称更容易,这样我们就可以将 example.h 和 example.c 关联为同一模块的标头和源代码。

    例如,头文件 example.h 引用 example.c,那么包含 example.h 就足够了?

    告诉编译器example.c中存在什么就足够了。

    请记住,标头的目的是解释其他源文件中存在的内容。 (以及声明类型,它们本身不会创建代码。)

    这是一个 C 问题,但在 learncpp.com 上有一个非常好的概述,它同样适用于 C 和 C++。具体来说,您可能希望通读:

    【讨论】:

    • 但是如果头文件没有告诉编译器怎么知道实际函数在哪里呢?
    • 将所有东西连接在一起是链接器的工作。关于编译和链接如何工作的另一个非常好的解释是David Drysdale’s Beginner’s Guide to Linkers。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多