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