C编译的整个过程很复杂,大致可以分为以下四个阶段:

1)预处理阶段在该阶段主要完成对源代码的预处理工作,主要包括对宏定义指令,头文件包含指令,预定义指令和特殊字符的处理,如对宏定义的替换以及文件头中所包含的文件中预定义代码的替换等,总之这步主要完成一些替换工作,输出是同源文件含义相同但内容不同的文件。

2)编译、优化阶段编译就是将第一阶段处理得到的文件通过词法语法分析等转换为汇编语言。优化包括对中间代码的优化,如删除公共表达式,循环优化等;和对目标代码的生成进行的优化,如如何充分利用机器的寄存器存放有关变量的值,以减少内存访问次数。

3)汇编阶段将汇编语言翻译成机器指令

4)链接阶段链接阶段的主要工作是将有关的目标文件连接起来,即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的目标文件成为一个能够被操作系统装入执行的统一整体。

C语言编译编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。

C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件

1.编译预处理读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理伪指令主要包括以下四个方面

(1)宏定义指令,如#define Name TokenString,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。

c语言将源文件拷贝到目的文件,C语言编译过程 简介和详解相关推荐

  1. linux复制文件scp命令,Linux 中的文件复制cp命令和scp命令详解

    Linux 中的文件复制cp命令和scp命令详解 在使用操作系统的使用过程中,常常需要复制文件到本地或者传输文件到其他电脑上,这时候用到两个命令cp和scp. cp命令用来复制文件或者目录.scp是s ...

  2. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

       本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...

  3. 用windows系统下的DOS命令将腾讯视频客户端下载的qlv文件转换成MP4格式(图文详解)

    用windows系统下的DOS命令将腾讯视频客户端下载的qlv文件转换成MP4格式(图文详解) 前言 原理 工具 步骤 延伸 博主联系方式 前言 本人喜欢收集各种优秀的视频,但是很多情况下我们看到的视 ...

  4. R语言生存分析(survival analysis)与生存资料有关的概念详解

    R语言生存分析(survival analysis)与生存资料有关的概念详解 目录 R语言生存分析(survival analysis)与生存资料有关的概念详解 #生存分析

  5. java 生成dump_java dump文件怎么生成和分析-JMAP用法详解

    jmap是java自带的工具 1. 查看整个JVM内存状态 jmap -heap [pid] 2. 查看JVM堆中对象详细占用情况 jmap -histo [pid] 3. 导出整个JVM 中内存信息 ...

  6. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...

  7. linux下grep文件内容搜索工具及基本正则表达式详解

    linux下grep文件内容搜索工具及基本正则表达式详解 grep命令: 根据模式(文本字符和基本正则表达式的元字符组合而成之匹配条件)搜索文本, 并将符合模式的文本行显示出来. 格式:grep [选 ...

  8. python交互式和文件式区别_Python 运行.py文件和交互式运行代码的区别详解

    代码版本:3.6.3 1. 交互式运行代码会直接给出表达式的结果,运行代码文件必须print才能在控制台看到结果. 直接给出结果: 没有print是看不到结果的: 有print才能看到结果: 另:交互 ...

  9. python中docx模块的使用_python使用docx模块读写docx文件的方法与docx模块常用方法详解...

    一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象 ...

最新文章

  1. 2、Reactive Extensions for .NET(译)
  2. 在NVIDIA Jetson Xavier NX上把yolov4-deepsort的模型pb模型使用tensorflow-onnx和onnx-tensorrt工具最终转换为tensorrt模型
  3. ABAP类的继承、多态、重载
  4. ML:自然语言处理NLP面试题
  5. php 各种进制表示,php各种进制的转换
  6. 利用真值表法求取主析取范式以及主合取范式的实现(C++)
  7. 计算机网络按信息传输介质的性能来划分,大学计算机基础练习题网络技术.doc...
  8. Python案例:求满足条件的人数
  9. C# DataTable学习
  10. Sencha Cmd 6 和 Ext JS 6 指南文档(部分官方文档中文翻译)
  11. 免费CMS系统的广告如何去掉
  12. Composite(组合)
  13. Java二分查找代码
  14. SoapUI接口测试——关联——参数化
  15. 计算机专业英语pdf词汇百度盘,计算机专业英语词汇词.pdf
  16. win10没有自带计算机,Win10没有自带游戏怎么办 Win10找回自带游戏方法
  17. python常用的颜色英文表达_面料颜色中英文翻译对照表
  18. Java无法加载主类
  19. HR最不认同的5大跳槽理由排行榜
  20. 蔬菜图片的类型识别系统【基于MobileNetV3模型】

热门文章

  1. python学生信息管理系统心得体会-python实现名片管理系统
  2. python好吗-Python现在就业前景好吗?
  3. python程序只能使用源代码进行运行吗-python在运行时更改源代码
  4. python必背内容-初学Python必背手册
  5. 用python画花瓣-Python:绘制樱花树
  6. 不属于python开发用户界面第三方库的是-模拟试卷C【单项选择题】
  7. python绘制3d图-python中Matplotlib实现绘制3D图的示例代码
  8. python爬虫流程-小白必看的Python爬虫流程
  9. 自学python需要什么配置的电脑-入门学python需要什么配置的电脑?
  10. 少儿python编程培训-厦门在线儿童编程课