Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请解释C中头文件的用途和机制_C_Header Files - Fatal编程技术网

请解释C中头文件的用途和机制

请解释C中头文件的用途和机制,c,header-files,C,Header Files,在阅读有关C语言编译的文章时,我一直在理解头文件。我在谷歌上搜索了我最好的,但仍然很困惑。请解释: 如果我们有一个主程序(main.c),它调用某个函数,还有一个附加程序(mod.c),它包含该函数的实现,那么制作一个额外的头文件(mod.h)有什么意义呢?我知道它包含该函数的描述(可能还有许多其他函数),但仍然。。。重点是什么?为什么我不能提前准备一个目标文件(mod.o),并在需要时随时准备好供我的任何程序使用 这个#包括“mod.h”是如何工作的?编译器查看文件,检查内部函数的描述,然后。

在阅读有关C语言编译的文章时,我一直在理解头文件。我在谷歌上搜索了我最好的,但仍然很困惑。请解释:

  • 如果我们有一个主程序(
    main.c
    ),它调用某个函数,还有一个附加程序(
    mod.c
    ),它包含该函数的实现,那么制作一个额外的头文件(
    mod.h
    )有什么意义呢?我知道它包含该函数的描述(可能还有许多其他函数),但仍然。。。重点是什么?为什么我不能提前准备一个目标文件(
    mod.o
    ),并在需要时随时准备好供我的任何程序使用
  • 这个
    #包括“mod.h”
    是如何工作的?编译器查看文件,检查内部函数的描述,然后。。。下一步是什么?它如何知道在哪里可以找到函数源代码?它是否读取
    mod.c
    文件并复制粘贴到
    main.c
    文件
  • Linux操作系统中标准函数(如
    printf、scanf
    等)的源代码在哪里

  • 如果我的问题听起来很愚蠢,我很抱歉

    编译代码(“
    .o
    文件”)在C语言中基本上不包含类型信息,甚至不包含函数所需的参数数量。没有足够的信息(试图)确保您以正确的方式使用这些函数。最后一个问题是:查看C库(Linux上通常是glibc,但还有其他库)。此外,当您包含时,预处理器基本上会将文件的内容复制/粘贴到.C中。这样,当编译器运行时,一切都准备就绪。您似乎对编译器的工作方式没有清楚的了解。你的问题听起来并不愚蠢,但可能很难回答,因为有很多你不知道的。幸运的是,互联网上有很多好信息。也许,你应该读点书。例如,您可以从搜索“编译器是如何工作的”开始。请记住,C是20世纪70年代早期的产物。C编译器往往一次只处理一个源文件-它们不查看目录中的其他文件,除了源代码中的
    #include
    指令中指定的文件。所包含文件的内容被读入,因此编译器现在可以看到任何类型定义、对象或函数声明等。库函数(如
    printf
    )的代码通常作为预编译库分发,您只需对其进行链接,尽管有些实现也分发源代码。