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月前
|
存储 自然语言处理 编译器
【C语言】编译与链接:深入理解程序构建过程
【C语言】编译与链接:深入理解程序构建过程
|
1月前
|
自然语言处理 编译器 Linux
【C语言篇】编译和链接以及预处理介绍(上篇)1
【C语言篇】编译和链接以及预处理介绍(上篇)
40 1
|
3月前
|
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仍因其灵活性和强大的功能被广泛采用。
116 1
|
28天前
|
存储 自然语言处理 编译器
|
1月前
|
编译器 Linux C语言
【C语言篇】编译和链接以及预处理介绍(下篇)
【C语言篇】编译和链接以及预处理介绍(下篇)
31 1
【C语言篇】编译和链接以及预处理介绍(下篇)
|
27天前
|
自然语言处理 编译器 Linux
C语言中抽象的编译和链接原理
C语言中抽象的编译和链接原理
20 1
|
1月前
|
存储 C语言
【C语言篇】编译和链接以及预处理介绍(上篇)2
【C语言篇】编译和链接以及预处理介绍(上篇)
36 0
|
24天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
31 3
|
15天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
30 10