编译器首先执行的main或头文件?

时间:2013-07-27 09:40:47

标签: c compiler-construction header-files

#include<stdio.h>
int main()
{    
    printf("hi");    
}

将执行第一个主文件或头文件?

主程序首先执行并包含头文件的内容吗?

4 个答案:

答案 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的输出以形成可执行文件。