【发布时间】:2013-07-27 09:40:46
【问题描述】:
#include<stdio.h>
int main()
{
printf("hi");
}
哪个会先执行主文件或头文件?
主程序会先执行并包含头文件的内容吗?
【问题讨论】:
-
编译器不执行任何操作。它只编译源代码。它按照语句、声明等出现的顺序对其进行编译。
标签: c compiler-construction header-files
#include<stdio.h>
int main()
{
printf("hi");
}
哪个会先执行主文件或头文件?
主程序会先执行并包含头文件的内容吗?
【问题讨论】:
标签: c compiler-construction header-files
#include 表示在找到#include 的那一行准确地插入文件。这是由预处理器完成的,因此编译器不再看到#include 命令本身。在您的情况下,这意味着首先来自 stdio.h 的所有代码都经过编译,然后是您的函数 main()。但是程序执行总是以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 阶段的输出以形成可执行文件。
【讨论】: