永发信息网

为什么要对C源程序进行编译、链接

答案:4  悬赏:80  手机版
解决时间 2021-07-30 20:40
求解
最佳答案
C++程序从编译到链接然后再到调用的整个过程如下。
只是个人最近观点,希望能与志同道合的同学一起讨论。

注:这里只是研究C++的主流编译过程,与Java没有任何关系,因为使用的技术完全不一样(Java是编译和解释结合的语言)。并且由于不同的编译器厂商对于程序的编译过程不尽相同,但是主要流程还是一样的。

其实长久以来我就一直很不清楚obj文件的内容到底是什么,有人说是汇编,有人说是机器语言。如果是机器语言的话,那编译的过程是怎样加入操作系统信息的呢?因为这个问题的不断扩展和困扰,便决定彻底研究一下,网上几乎找不到相关资料,作者参照了基本系统编程的书籍后自行整理而来,数目见底,仅供参考,欢迎讨论。

一个C++工程中会存在cpp文件,头文件,库文件。

1. 首先经历的是预处理过程,将头文件加载进来,并且将各种#define信息代入。这时会见不到头文件,工程经过处理后会生成以cpp文件为基础的编译单元。有人可能会问那么头文件到哪里去了。其实头文件将cpp文件中的#include替换掉了。因此在以后的编程中需要严格注意include的先后顺序。因为C++语言是一种很注重申明的语言,为什么会这样这与程序的编译过程和链接过程的算法有关。貌似话题有点转远了,其实在这个阶段是生成一个个独力的编译单元。

2. 在编译单元生成之后,便是将编译单元进行编译,其实对于主流的编译其实存在两个阶段,首先是生成汇编语言,然后使用汇编器生成机器语言。其实这里要讲解的是汇编语言怎么变成机器语言的呢。机器语言顾名思义就是0101的二进制代码。对于一个类似于MOV AX,BX(这里写的是Intel 80x86的汇编代码,其实几乎每一种不同架构的芯片的汇编语言不怎么一样)的代码而言就是将MOV和AX和BX原封不动的用0101替换掉,如MOV代码是35的话AX为01,BX为10的话翻译的机器代码就是350110,二进制也就是001101010000000100010000。
看这个网址, http://tinggo.javaeye.com/blog/436683这个解释的很好,相信你会明白
全部回答

C 语言 属于 较为底层的语言 虽然说可以直接操控硬件

但是 毕竟计算机 不是人

他只认识 0 和 1

这些 当然就需要编译器来 为我们 翻译给 计算机听!!

gcc编译出来的程序在本地执行 arm-linux-gcc编译出来的程序在目标机(ARM平台)上执行 嵌入式应该用交叉编译器(如果不是在ARM本身上开发)

首先要说的是C语言属于高级语言,不能直接被计算机识别而执行,所以需要一些操作来转化。。

一开始是编译预处理,对宏,包含指令,编译指令等进行处理,然后是词法语法分析,将源代码翻译成中间代码(一般是汇编),接着优化代码,,然后将中间代码翻译成机器语言(目标文件),机器语言是计算机的基层语言,能被计算机直接识别。。

接着链接目标文件,生成可以执行文件。。。

大概就是这样。。详细的LZ可看这个总结。。

http://bbs.zdnet.com.cn/thread-1614727-1-1.html

程序设计语言分为两类;编译型和解释型。

编译型的程序设计语言就需要先编译后运行,程序在编译会产生“中间代码”,这个过程与机器无关,而运行时是运行通过编译产生的“目标代码”即机器语言。如c语言就属于这种类型。

解释型,不产生“中间代码”是边解释源代码,边执行解释生成的目标代码即执行机器代码。如java语言。

注:计算机只识别机器语言,即二进制。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
rocking horse shit
广州边度有有关韩国或者日本歌星噶物品
不知道为什么老上英语课到睡觉了。要怎么做。
为什么每天早上起来就会特别的想他?
新乡县新乡国珍松花粉地址是什么,有没有知道
接头篮球C怎么样
我想下冒险岛,就是以前小时候手柄玩的
单位成本分配率,计划成本分配法的方法内容
大冶市黄石永利宾馆在什么地方啊,我要过去处
我刚买了台电脑开了一下好的 再开 显示器开不
云南畜牧兽医杂志,广西壮族自治区水产畜牧兽
我到公司一个月了,发工资了.可是公司要扣一个
松滋市荆州福康口腔诊所这个地址怎么能查询到
如何用支付宝绑定天猫,交易猫在哪里看绑定支
石狮到厦门要在哪个车站坐车?要有发票的,早
推荐资讯
头发分叉,是怎么回事?该怎样解决?
双清区邵阳南方水泥海螺水泥厂家直销这个地址
被自己最爱的人欺骗了怎么办??
寻仙会员师徒节日礼包
桃源县常德泰康人寿在什么地方啊,我要过去处
奇怪,我想进我自己的空间看看 怎么现在就还
新郑机场大巴有到大学路航海路(漓江温泉)的
问问里面的积分能不能换
战国时一金值现在多少钱?
建设银行办张可以网银的银行卡要多少钱
作文题目:我家的一件珍品
手机百度怎么登陆账号,百度贴吧怎么用手机号
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?