IDE中编译器干过的事

一、需求场景

强大的IDE总是将自己干过的事隐藏起来(默认配置、编译、链接等),我们只需要点击调试按钮等结果。但很多时候bug并不会在编译阶段出现,等我们debug时就束手无策,计无所出。所以了解一下编译器的工作原理和机制很有必要。

二、忽视了什么?

通常我们写的源码(.c/.cpp文件)会经过预处理(预编译成.ii)->编译->汇编->链接->装载到内存等最后被执行

今天我们先聊预处理(预编译成.ii)->编译->汇编

1、预处理

主要包括三方面:宏定义;头文件;条件编译。

也包含去注释等处理。

i、针对宏定义(#define)的变量进行直接展开替换。

ii、处理#include的头文件(.h),将其内容插入至预编译指令处,且这个行为是递归的(预处理指令中的头文件中可能仍包含其他头文件)。

iii、处理条件预编译指令 #ifdef #else #endif等

2、编译

主要将预处理后的文件(.ii格式)编译成汇编指令(如MOV R0,R1){针对硬件架构的迥异,编译器有谓之生成中间代码生成目标代码}。编译(编译原理)主要包含词法分析,语法分析,语义分析,代码优化等过程,主要阐述电脑以人类的思维理解并将源码编译成汇编指令(直接对寄存器和存储器等直接操作的指令)。

3、汇编

将汇编指令(MOV R0,R1)解释成机器指令(01010101)。

这个过程依赖于指令系统(硬件架构不同,指令系统一般也不同)。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值