2,c语言编译过程简析

目录

编译器

低级语言

机器语言和汇编语言

编译过程

每个步骤的作用

预编译

编译

汇编

链接

过程总结


编译器

编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)

低级语言

低级语言是指机器语言和汇编语言

机器语言和汇编语言

电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。

为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。

编译过程

编译一般分为4个步骤:

  1. 预处理( preprocessing)
  2. 编译( compilation)
  3. 汇编( assembly)
  4. 链接( linking)

每个步骤的作用

预编译

  1. 将所有的#define删除,并展开所有的宏定义;
  2. 处理所有的预编译指令,例如:#if,#elif,#else,#endif; 
  3. 处理#include预编译指令,将被包含的文件插入到预编译指令的位置; 
  4. 添加行号信息文件名信息,便于调试;
  5. 删除所有的注释:// /**/; 
  6. 保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。
  7. 生成.i文件

编译

  1. 语法分析,语义分析,源代码优化,目标代码生成,目标代码优化;
  2. 生成汇编代码;
  3. 汇总符号;
  4. 生成.s文件

汇编

  1. 根据汇编指令和特定平台,把汇编指令翻译成二进制形式;
  2. 合并各个section,合并符号表;
  3. 生成.o(obj)文件

链接

  1. 合并各个.obj文件的section,合并符号表,进行符号解析;
  2. 符号地址重定位;
  3. 生成可执行文件

过程总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值