23.(C语言)编译和链接

简介: 23.(C语言)编译和链接

可执行程序是.exe

vs2022:是一个集成开发环境

一.翻译环境

多个.c文件经过编译器,生成对应目标文件,多个目标文件和链接库一起经过链接器,生              成.exe

编译器的3步走(iOS):预处理,编译,汇编

1.预处理

2.编译

把代码变为汇编语言

2.1词法分析

将源代码程序输入扫描器,对着16个记号进行识别

2.2语法分析

通过语法分析器,对扫描产生的记号进行语法分析,从而产生语法树,语法树是以表达式为节点的树,以下面这个式子为例

2.3语义分析

通过语义分析器来完成语义分析,编译器做的是静态分析,主要是针对类型的


3.汇编

汇编器将汇编代码转化为机器可执行的指令,汇编的命令如下

4.链接

链接的时候是把一堆文件链接在一起生成可执行程序

链接过程主要包括:地址和空间分配,符号决议和重定位等

例如说,函数的调用,主函数中也会储存被调用函数地址(例如记为0x0000),在将多个.c文件链接时,会发现实际上被调用函数的地址(0x0010),那么0x0010就会将0x0000删去覆盖它。

以add函数为例,链接根据引用符号add在其他模块中查找add函数的地址,然后将.c中所有引用到add的指令重新修正,让他们的目标地址为真正的add函数的地址。对于全局变量的修正也是类似的方法。这个地址修正的过程也被叫做:重定位

二.运行环境

1.程序必须载入内存中,在有操作系统的环境中执行

2.程序的执行便开始,接着便调用main函数

3.在内存上,处理各种变量,如局部全局变量,返回地址等

4.终止程序


相关文章
|
1月前
|
NoSQL 编译器 程序员
【C语言】揭秘GCC:从平凡到卓越的编译艺术,一场代码与效率的激情碰撞,探索那些不为人知的秘密武器,让你的程序瞬间提速百倍!
【8月更文挑战第20天】GCC,GNU Compiler Collection,是GNU项目中的开源编译器集合,支持C、C++等多种语言。作为C语言程序员的重要工具,GCC具备跨平台性、高度可配置性及丰富的优化选项等特点。通过简单示例,如编译“Hello, GCC!”程序 (`gcc -o hello hello.c`),展示了GCC的基础用法及不同优化级别(`-O0`, `-O1`, `-O3`)对性能的影响。GCC还支持生成调试信息(`-g`),便于使用GDB等工具进行调试。尽管有如Microsoft Visual C++、Clang等竞品,GCC仍因其灵活性和强大的功能被广泛采用。
90 1
|
1月前
|
存储 自然语言处理 程序员
【C语言】文件的编译链接和预处理
【C语言】文件的编译链接和预处理
|
1月前
|
自然语言处理 编译器 C语言
C语言程序的编译
C语言程序的编译
39 2
|
1月前
|
C语言 索引
C语言编译环境中的 调试功能及常见错误提示
这篇文章介绍了C语言编译环境中的调试功能,包括快捷键操作、块操作、查找替换等,并详细分析了编译中常见的错误类型及其解决方法,同时提供了常见错误信息的索引供参考。
|
3月前
|
编译器 C语言
C语言编译详解:GCC分步编译与一次编译多个文件
C语言编译详解:GCC分步编译与一次编译多个文件
289 2
|
3月前
|
Unix 编译器 C语言
C语言中的条件编译:探索编译时的决策
C语言中的条件编译:探索编译时的决策
|
3月前
|
自然语言处理 Ubuntu 编译器
|
3月前
|
存储 自然语言处理 编译器
【C语言】:编译与链接
【C语言】:编译与链接
29 0
|
3月前
|
Ubuntu 编译器 Linux
C语言编译过程分享
C语言编译过程详解