C/C++程序从源代码到可执行程序的流程

  对于一个C/C++编写的程序,从源代码到可执行程序的过程通常是由IDE来完成的,一般分为四个步骤:预处理、编译、汇编、链接,下面就来详细说一下这四个步骤。

预处理:

  主要是对其中的伪指令和特殊符号进行处理:

  1. 将所有的"#define"进行替换,并删除所有的"#define"
  2. 处理所有条件预编译指令,比如:”#if”,“#ifdef”,“#elif”,“#else”,“#endif”,根据相关文件,将一些不必要的代码进行过滤。
  3. 处理头文件指令“#include”,将包含的头文件插入到该预处理指令的位置。这个过程是递归的,也就是说被包含的文件可能还包含其他文件。
  4. 删除所有注释“//”,“/* */”以及添加行号,便于编译器编译时产生调试用的行号信息及用于编译时产生编译错误或警告时显示行号。
  5. 保留所有的“#pragma”编译器指令,经过预处理后的.ii文件不包含任何宏定义,因为所有的宏在之前已经被展开,并且包含的文件也已经被插入到.ii文件中。
编译:

  编译就是对经过预处理后的文件进行词法分析和语法分析,确认过所有的指令都合法后生成相应的汇编代码。

汇编

  将汇编代码转变成机器可以执行的机器指令。对于每一条汇编语句在系统中都对应着一条机器语言。对于已经被翻译过的汇编程序,都将经过这一处理得到相应的目标文件。

链接

  链接的主要内容就是将各个模块彼此连接,使得各个模块之间能够正确衔接。链接的过程主要包裹地址和空间的分配,符号决议和重定位等步骤。这样就可以将这些模块形成一个能被操作系统装入执行的整体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 两种装饰器

目录 带参数的装饰器(函数) 类装饰器 装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。 带参数的装…

如何体现机器智能和群体智能的关系,2018新版互联网大脑模型绘制

作者:刘锋 计算机博士 互联网进化论作者2018年新的这一版,也是互联网大脑模型图的第五个版本,距离第一版的发布已经有10年时间(2008年),距离上一版第四版也有1年时间,在这一版中主要解决了如何…

Python可变传参: *args和**kwargs

args是参数的数组,kwargs就是当你传入keyvalue是存储的字典。 请看例子: def test(a,*args,**kwargs): print "a: ",a print "args: ",args print "kwargs: ",kwargs test(1,2,3,d4,e5) 输出结果: a: 1 args: …

7/7 第7篇 函数名与函数指针

第7篇 函数名与函数指针 一 通常的函数调用 一个通常的函数调用的例子: //自行包含头文件 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun(10); //这里是调用MyFun(10);函数 return 0; }…

全球互联正在创造一个知识极大丰富和隐私终结的时代

来源:资本实验室摘要:据预测,到2020年,全球物联网连接设备将超过500亿个,会产生600泽字节的信息。这么庞大的数据量,将如何影响并改变我们的生活和工作?聚焦前沿科技创新与传统产业升级据预测&a…

大数据计算引擎:impala对比hive

目录 Impala与Hive的异同 数据存储 元数据 SQL解释处理 执行计划: 数据流: 内存使用: 调度: 容错: 适用面: Impala相对于Hive所使用的优化技术 Impala的优缺点 Impala与Hive的异同 数据存储 …

从外部调用Django模块

import os import sys sys.path.insert(0,/data/cloud_manage) from django.core.management import setup_environ import settings setup_environ(settings)from common.monitor import Monitor from django.db import connection, transaction 前提就是,要新建一…

泡沫破裂之后,强化学习路在何方?

作者|侯宇清、陈玉荣来源|智能单元编辑|Debra一、深度强化学习的泡沫2015 年,DeepMind 的 Volodymyr Mnih 等研究员在《自然》杂志上发表论文 Human-level control through deep reinforcement learning[1],该论文提出…

常见的设计模式--单例模式

设计模式 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的是为了代码可重用性、让代码更容易被他人理去解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工…

一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

目录 1、什么是维度表? 2、维度表设计原则 (1)维度属性尽量丰富,为数据使用打下基础 (2)给出详实的、富有意义的文字描述 (3)区分数值型属性和事实 (4)…

javascript 键值转换

for (var i 0; i < headerFields.length; i) {fieldToIndex[headerFields[i]] i;} 转载于:https://www.cnblogs.com/EasonSun/archive/2012/08/03/2621661.html

Github项目:AI消除马赛克实战

目录 1、原理 2、准备工作 3、消除马赛克 4、效果对比 1、原理 该算法利用线性盒滤波器分别处理每个块的事实。对于每个块&#xff0c;它将搜索图像中的所有块像素化以检查直接匹配。 对于大多数像素化图像&#xff0c;Depix能够找到单个匹配结果。它假设这些是正确的。然…

C++继承一览

继承的概念及定义 继承机制是面向对象程序设计是代码可以复用的重要手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生的类称为派生类。继承呈现了面向对象程序设计的层次结构&#xff0c;体现了由简单到复杂的认知过程。…

人工智能能否复制人脑引争论 美媒:目前AI仍存在局限性

来源&#xff1a;网易智能摘要&#xff1a;人们应用人工智能技术&#xff08;AI&#xff09;的所有领域&#xff0c;包括无人驾驶汽车、机器人医生、超过10亿中国公民的社会信用评分系统等&#xff0c;当前都取决于一场关于如何让AI做其不能做的事的辩论。8月6日报道称&#xf…

Tushare免费获取股票数据:实时数据,历史数据,行情数据

一 操作手册 引导用户顺利开始使用Tushare Pro数据&#xff0c;以下步骤将带您开始Tushare数据之旅&#xff1a; 用户注册登录后可调用数据&#xff1a;https://tushare.pro/register?reg399205 二 如何获取TOKEN凭证 1、登录成功后&#xff0c;点击右上角->个人主页 2、…

2012/8/3 Extjs使用TabPanel时需要注意的问题

在创建Ext.TabPanel时&#xff0c;配置项deferredRender经常会被忽略&#xff0c;关于这个配置项&#xff0c;我们来看一下API文档的解释&#xff1a;“内置地&#xff0c;Tab面板是采用Ext.layout.CardLayout的方法管理tabs。此属性的值将会传递到布局的Ext.layout.CardLayout…

排序(冒泡、选择、插入、希尔、快排、堆排、归并)

冒泡排序 冒泡排序时通过无序区中相邻记录的关键字间的比较和位置的交换&#xff0c;使关键字最小的元素如气泡似的逐步上浮直水面。有序区逐渐扩大&#xff0c;无序区逐渐缩小。   冒泡排序算法的原理如下&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就…

人民日报:人工智能,务实发展是正道

来源&#xff1a;人民日报摘要&#xff1a;近日&#xff0c;由中国人工智能学会主办的中国人工智能大会在深圳召开&#xff0c;利用这个人工智能领域产、学、研紧密结合的高端前沿交流平台&#xff0c;围绕关键核心技术发展等当前热点话题&#xff0c;学者和业界人士进行了充分…

kudu参数优化设置,让集群飞起来~

根据数据体量&#xff0c;结合集群各节点的CPU、内存、磁盘的表现&#xff0c;合理优化设置kudu参数&#xff0c;让集群飞起来~ 如有雷同&#xff0c;纯属借鉴~ 1.Kudu后台对数据进行维护操作&#xff0c;如写入数据时的并发线程数&#xff0c;一般设置为4&#xff0c;官网建议…

(转)Some awareness before migrating from x86 to x64

本文转自&#xff1a;http://www.cnblogs.com/feishunji/archive/2010/10/20/1856798.html Lets assume we have the following three dlls: anycpu.dll -- compiled "any cpu" x86.dll -- compiled "x86" x64.dll -- compiled &…