#include<stdio.h>
int main()
{
printf("hi");
}
哪个将首先执行主文件或头文件?
主程序会先执行并包含头文件的内容吗?
#include<stdio.h>
int main()
{
printf("hi");
}
哪个将首先执行主文件或头文件?
主程序会先执行并包含头文件的内容吗?
#include
意味着文件的文本插入恰好在#include
找到的行。这是由预处理器完成的,因此编译器不再看到#include
命令本身。在您的情况下,这意味着首先编译 stdio.h 中的所有代码,然后编译main()
您的 function 。但是程序执行总是以main()
C 编译翻译单元。构建一个翻译单元,就好像包含的文件存在于您包含它们的主源文件中一样。
因此,在这种情况下,编译器在看到头文件的内容之前就看到了main
(它实际上并没有执行它们中的任何一个)。
C11部分6.10.2 Source file inclusion /2
是 ISO 标准的控制部分(与 C99 中的部分编号相同):
形式的预处理指令
# include <h-char-sequence> new-line
在一系列实现定义的位置中搜索由
<
和>
分隔符之间的指定序列唯一标识的标头,并用标头的全部内容替换该指令。如何指定位置或标识的标头是实现定义的。
至于运行程序时首先执行的内容,有各种初始化操作超出了您的直接控制范围,但 C代码的第一次执行以开头main
,至少对于托管环境而言。在嵌入式系统或像 Linux 这样的操作系统等独立环境中,该标准允许任何起点。
简单地说,#include
就是粘贴包含文件的内容。所以事情是按照你的文件顺序编译的#include
,然后放置代码。
C 程序的翻译分 8 个阶段完成。在第 4 阶段执行包含指令,在第 8 阶段收集第 7 阶段的输出以形成可执行文件。