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.终止程序


相关文章
|
存储 自然语言处理 编译器
【C语言】编译与链接:深入理解程序构建过程
【C语言】编译与链接:深入理解程序构建过程
216 1
|
自然语言处理 编译器 Linux
【C语言篇】编译和链接以及预处理介绍(上篇)1
【C语言篇】编译和链接以及预处理介绍(上篇)
131 1
|
存储 自然语言处理 Unix
【C语言】C语言 4 个编译过程详解
编译是将源代码转换为目标代码的过程。它是在编译器的帮助下完成的。编译器检查源代码是否存在语法或结构错误,如果源代码没有错误,则生成目标代码。
510 1
|
存储 自然语言处理 编译器
C语言编译和链接
C语言编译和链接
114 1
C语言编译和链接
|
编译器 Linux C语言
【C语言篇】编译和链接以及预处理介绍(下篇)
【C语言篇】编译和链接以及预处理介绍(下篇)
148 1
【C语言篇】编译和链接以及预处理介绍(下篇)
|
自然语言处理 编译器 Linux
C语言中抽象的编译和链接原理
C语言中抽象的编译和链接原理
127 1
|
存储 C语言
【C语言篇】编译和链接以及预处理介绍(上篇)2
【C语言篇】编译和链接以及预处理介绍(上篇)
121 0
|
3月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
990 0
|
5月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
320 15
|
11月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
606 23