- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序编译过程详解
C程序编译过程详解
C程序编译过程详解 概述: C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考、多实践。 一般情况下,我…
竖笛吹奏教学设计 教学内容:6孔竖笛 教学目标: 1、正确的演奏姿势。 2、学会长音、吐音的吹奏。 3、复习歌曲《小星星》《欢乐颂》《两只老虎》的吹奏,并能较好的演奏。 教学重点、难点: 1、学生持笛、运气、运指及吐音的掌握。 2、熟练的吹奏《小星星…
随着经济全球化和高新技术的迅猛发展,世界范围内的人才竞争日趋激烈,人才流动日益频繁,使得我国人才流失的压力逐渐加大,“人才安全”问题日见突出,已经成为当前人才工作中一个迫切需要关注并着力解决的问题。有专家甚至建言,应当将“人才安全”视为与领土安全、经…
C程序编译过程详解
概述:
C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考、多实践。 一般情况下,我们只需要知道分成编译和连接两个阶段,编译阶段将源程序(*.c)转换成为目标代码(,一般是obj文件,至于具体过程就是上面说的那些阶段),连接阶段是把源程序转换成的目标代码(obj文件)与你程序里面调用的库函数对应的代码连接起来形成对应的可执行文件(exe文件)就可以了,其他的都需要在实践中多多体会才能有更深的理解。
一. 简单解释:
程序的编译过程如上图所示,分为预处理、编译、汇编、链接等几个阶段。
预处理:预处理相当于根据预处理命令组装成新的C程序,不过常以i为扩展名。 编译: 将得到的i文件翻译成汇编代码。s文件。
汇编: 将汇编文件翻译成机器指令,并打包成可重定位目标程序的O文件。该文件是二进制文件,字节编码是机器指令。
链接: 将引用的其他O文件并入到我们程序所在的o文件中,处理得到最终的可执行文件.
二.详细解释
编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
编译的完整过程:C源程序--预编译处理(.c)--编译、优化程序(.s、.asm)--汇编程序(.obj、.o、.a、.ko)--链接程序(.exe、.elf、.axf等)
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
C源程序头文件--预编译处理(cpp)--编译程序本身--优化程序--汇编程序--链接程序--可执行文件
1.编译预处理
读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理
[析] 伪指令主要包括以下四个方面
(1) 宏定义指令,如#define Name TokenString,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的 Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。
(2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif,等等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉
(3)头文件包含指令,如#include “FileName”或者#include 等。在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用 头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再 在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。
包含到c源程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。在程序中#include它们要使用尖括号 ()。另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号(”“)。
(4)特殊符号,预编译程序可以识别一些特殊的符号。例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名
您可能关注的文档
- bf109 bf109模型飞机制作过程(种瓜得豆,乐在其中_图文.doc
- bhzfcg gk 2016 014 2013T-GK-014浙江机电职业技术学院、老年活动中心中央空调_图文.doc
- bingo os v3.0系统 管理信息系统答案补充版-bingo.doc
- bios中英文对照表 CGMP 中英文对照.doc
- bios中英文对照表 无损检测中英文对照.doc
- bios中英文对照表大全 恐龙中英文名字对照大全.doc
- A监表.doc
- bi报表系统 BI报表系统功能简介_图文.doc
- BST200-DHB微机变压器低后备保护装置说明书_图文.doc
- bt137 BT137S-600G,118;BT137S-600,118;BT137S-600F,118;BT137S-800F,118;中文规格书,Datasheet资料.doc
最近下载
- 京剧的服装课件.ppt VIP
- 保证供货周期的组织方案和人力资源安排.doc VIP
- 乌有先生历险记(原文,练习,注释,翻译)解读.doc
- 红色经典故事PPT课件.pptx VIP
- (人教版2024)生物七上2.2.1 无脊椎动物(新教材).pptx
- 2023-2024学年江西省上饶市余干县八年级上期中物理试卷附答案解析.pdf
- 西北师范大学教育学理论与实践期末试卷.doc VIP
- 2023年成都信息工程大学数据科学与大数据技术专业《数据结构与算法》科目期末试卷B(有答案).docx VIP
- 河北省衡水中学2024-2025学年高三上学期第一次综合素养测评数学试题(原卷版).docx
- 数据结构(用面向对象方法与C++语言描述)第二版.pdf VIP
文档评论(0)