【无标题】

编译和链接

文件变为可执行文件的路程
test.c->test.obj->test.exe
ps:目标文件也是二进制文件,不能打开文本编辑器读懂

编译和链接也可以分为四个阶段
预编译,编译,汇编,链接
由 预处理器、编译器、汇编器、和链接器 执行
四个过程分别作用于文件并生成
.c>.i->.s->.o->exe

汇编器将文本文件变为二进制文件

编译

多个.c文件单独经过编译器
注意:链接的时候,多个目标文件一起经过链接器链接
编译=预编译+编译+汇编

预编译(预处理)

  1. 替换#define定义的宏
  2. 处理预编译的指令 #if #endif
  3. 替换#include引用的头文件
  4. 保留#pragma编译器指令·
  5. 删除注释
  6. 添加行号和文件名标识,方便后续的调试

预处理阶段可以认为是简单的文本替换

编译

语法分析,词法分析,语义分析
符号汇总(函数符号Add)

词法分析(扫描器)

拆分括号,文本,标识符,运算符

语法分析(语法分析器)

语法树
语法分析器将记号(Token)产生语法树(Syntax Tree)。yacc工具可实现语法分析

语义分析

静态语义分析

汇编

把文本语言翻译成二进制机器语言
形成符号表(函数符号Add,函数地址)

对于extern声明,单独编译的时候不知道具体的地址。但是在符号表后期链接的时候会合并,生成最终可执行程序的时候符号会重定位。

ps:若只是声明而没有实际定义,编译阶段可以过,则在链接的时候会显示:link:无法解析的外部链接。

链接

把多个目标文件链接生成一个可执行程序

空间和地址分配
符号的决议和重定位

意义:实现分离编译

运行

载入内存,开辟栈,可以使用静态区,运行到main结束或者意外终止。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值