目录
C语言 程序的编译、链接、执行
C语言 程序的编译、链接、执行_c代码编译,链接,运行过程-CSDN博客https://blog.csdn.net/kjl167/article/details/124157077
程序的两种环境:
一、翻译环境
1.预编译
预编译:将源代码文件(.c)进行预编译处理生成预编译文件(.i)
功能:
- 执行预处理指令,如: #include 、#define
- 删除所有注释
条件编译:满足条件编译某些代码,不满足条件不编译某些代码
只用于调试程序的语句不应该出现在程序的产品版本中,但我们可能并不想把这些语句从源代码中删除,因为在需要一些维护性修改时,可能需要重新调试这个程序,此时还需要这些语句,条件编译可以实现这个目的。
2.编译
编译:将预编译后的文件编译为汇编代码
功能:
- 语法分析
- 词法分析
- 语义分析
- 符号汇总(汇总全局符号,如全局变量、函数名)
3.汇编
汇编:把汇编代码转换为机器指令(二进制指令)的目标文件
4.链接
链接:将多个目标文件和函数库链接为可执行程序
功能:
- 合并段表
- 符号表的合并和重定位
文件后缀名约定
C语言标准没有对文件后缀名进行规定,但在大多环境下有一套约定的文件后缀名
.h为后缀名的文件为C语言头文件
.c为后缀名的文件为C语言源代码文件
.i为后缀名的文件,是预编译后的C语言文件
.s为后缀名的文件,是编译过后的汇编代码文件
.o为后缀名的文件,是汇编后的目标文件(机器指令文件也称为二进制指令文件)。windows系统中目标文件以.obj为后缀名
.out为后缀名的文件,是多个目标文件与函数库链接之后的可执行程序。windows系统中以.exe为后缀名
二、执行环境
1.程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成
2.调用main函数运行
3.开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
4.终止程序,可以是正常终止main函数;也有可能是运行错误终止