编译系统会根据
1. C语言文件的编译与执行的四个阶段并分别描述
开发C程序有四个步骤:编辑、编译、连接和运行。
任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。
1、预处理:导入源程序并保存(C文件)。
2、编译:将源程序转换为目标文件(Obj文件)。
3、链接:将目标文件生成为可执行文件(EXE文件)。
4、运行:执行,获取运行结果的EXE文件。
(1)编译系统会根据扩展阅读:
将C语言代码分为程序的几个阶段:
1、首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。文件不包含任何宏定义,因为所有宏都已展开,并且包含的文件已插入。我归档。
2、编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分,也是最复杂的部分之一。
3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可以运行的可执行程序。也就是说,您需要链接大量的文件才能获得“a.out”,即最终的可执行文件。
4、在链接过程中,需要重新调整其他目标文件中定义的函数调用指令,而其他目标文件中定义的变量也存在同样的问题。
2. 编译系统通常由哪几个部分组成
一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。
3. 编程语言(比如C语言、java)是怎么被设计出来的设计的过程又是怎样的
参考一些资料,可以看一些发展历史。C语言历史
早期的操作系统等系统软件主要是用汇编语言编写的,如UNIX操作系统。由于汇编语言
依赖于计算机硬件,程序的可读性和可移植性都比较差。为了提高可读性和可移植性,最好
改用高级语言,但一般高级语言难以实现汇编语言的某些功能,而汇编语言可以直接对硬件
进行操作,例如,对内存地址的操作、位(bit)操作等。人们设想能否找到一种既具有一般
高级语言特性,又具有低级语言特性的语言,集它们的优点于一身。于是,C语言就在这种
情况下应运而生了,之后成为国际上广泛流行的计算机高级语言。它适合于作为系统描述语
言,即用来写系统软件,也可用来写应用软件。
C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL 60。1960年出现的
ALGOL 60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序,1963年英
国的剑桥大学推出了CPL(Combined Programming Language)语言。CPL语言在ALGOL 60的基
础上接近硬件一些,但规模比较大,难以实现。1967年英国剑桥大学的Matin Richards对
CPL语言作了简化,推出了BCPL(Basic Combined Programming Language)语言。1970年美国
贝尔实验室的Ken Thompson以BCPL语言为基础,又作了进一步简化,它使得BCPL能挤压在
8K内存中运行,这个很简单的而且很接近硬件的语言就是B语言(取BCPL的第一个字母),并
用它写了第一个UNIX操作系统,在DEC PDP-7上实现。1971年在PDP-11/20上实现了B语言,
并写了UNIX操作系统。但B语言过于简单,功能有限,并且和BCPL都是“无类型”的语言。
1972年至1973年间,贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言(取BCPL的
第二个字母)。C语言既保持了BCPL和B语言的优点(精练,接近硬件),又克服了它们的缺点
(过于简单,数据无类型等)。最初的C语言只是为描述和实现UNIX操作系统提供一种工具语
言而设计的。1973年,K.Thompson和D.M.Ritchie两人合作把UNIX的90%以上用C改写,
即UNIX第5版。原来的UNIX操作系统是1969年由美国的贝尔实验室的K.Thompson和
D.M.Ritchie开发成功的,是用汇编语言写的,这样,Unix使分散的计算系统之间的大规
模联网以及互联网成为可能。
后来,C语言多次作了改进,但主要还是在贝尔实验室内部使用。直到1975年UNIX第6版
公布后,C语言的突出优点才引起人们普遍注意。1977年出现了不依赖于具体机器的C语言编
译文本《可移植C语言编译程序》,使C移植到其它机器时所需做的工作大大简化了,这也推
动了UNIX操作系统迅速地在各种机器上实现。例如,VAX,AT&T等计算机系统都相继开发了
UNIX。随着UNIX的日益广泛使用,C语言也迅速得到推广。C语言和UNIX可以说是一对孪生兄
弟,在发展过程中相辅相成。1978年以后,C语言已先后移植到大、中、小、微型机上,如
IBM System/370、Honeywell 6000和Interdata 8/32,已独立于UNIX和PDP了。现在C语言已
风靡全世界,成为世界上应用最广泛的几种计算机语言之一。
以1978年由美国电话电报公司(AT&T)贝尔实验室正式发表的UNIX第7版中的C编译程序为
基础,Brian W.Kernighan(柯尼汉)和Dennis M.Ritchie(里奇)合着了影响深远的名着
《The C Programming Language》,常常称它为‘K&R’,也有人称之为‘K&R标准’或‘白
皮书’(white book),它成为后来广泛使用的C语言版本的基础,但在‘K&R’中并没有定义
一个完整的标准C语言。为此,1983年,美国国家标准化协会(ANSl)X3J11 委员会根据C语言
问世以来各种版本对C的发展和扩充,制定了新的标准,称为ANSI C,ANSI C比原来的标准C
有了很大的发展:K&R在1988年修改了他们的经典着作《The C Programming Language》,
按照ANSI C标准重新写了该书。1987年,ANSI又公布了新标准——87 ANSI C。目前流行的C
编译系统都是以它为基础的。当时广泛流行的各种版本C语言编译系统虽然基本部分是相同
的,但也有一些不同。在微型机上使用的有Microsoft C(MS C),Borland Turbo C,Quick C
和AT&T C等,它们的不同版本又略有差异。到后来的Java、C++、C#都是以C语言为基础发展
起来的。
4. 计算机高级语言的编译系统按软件分类来看是属于________。
计算机高级语言的编译系统按软件分类来看是属于系统软件。
因为编译软件和操作系统属于系森斗慎统软件所有的软件都是基于这些系统软件才能运行的。编译系统根据语言的规定编写源程序,然后进行编译、连接,生成可执行文件。
例如DOS操作系统加各类高级语言,如FORTRAN、PASCLL、C语言等就属于这种类型接口平台,用于提供编译任务输入接口以及处理状态信息输出接口,并根据输入的编译任务生成任务名;
(4)编译系统会根据扩展阅读:
过程
接收输入的编译任务;根据所述编译任务生成任务名;解析获得所述任务名对应的源代码;编译所述销伍源代码,并输出所述编译任务的处理状态信息。
上述技术方案中,通过接口平台接收编译任务,由接口平台以任务名形式发起编译请求,进行编译,简化了编译输入操作;处理状态信息,通过接口平台实时提供给客户端,简化了编译监控操作,大此敬大节约了人力资源。
参考资料来源:网络-编译系统
5. C语言编译器会编译改变过的代码,而不会编译没有改动的代码。 我想知道它是怎么判断程序是否有呗修改过的
编译器要记录你的编译生成文件,比如obj、exe等的生成日期,发现与相关的文件如.c源文件、obj等日期旧时则选择对此部分重新编译。
特别地,它记录所有相关文件,比如你新修改了某头文件.h,编译系统会逐一比较所有使用这个.h文件的编译结果,如果发现时间旧了就重新编译它们。
6. C语言&变量是什么意思
变量,与数学中的变量定义相同,都是一个可以随时变化的量,即,你可以在任何时间对这个变量值进行变更
其次 &a是指a的地址,想int &a一般用于函数传值
int ax(int a)和int ax(int &a)的区别在于
在第一个函数声明中,传进去的只是一个值,在ax函数中进行修改不会对调用ax函数的的函数中的参数有改变
而在第二个函数声明中,传进去的是地址本身,这样的传递在ax中改变了a的值候,在调用ax函数的函数中的a的值会同步修改(即:ax函数和调用ax函数的函数,两个共用一个变量)
7. 编译系统详细资料大全
编译系统又称为第二类编程环境开发者根据语言的规定编写源程式,然后进行编译、连线,生成执行档,例如DOS作业系统加各类高级语言,如FORTRAN、PASCLL、C语言等就属于这种类型接口平台,用于提供编译任务输入接口以及处理状态信息输出接口,并根据输入的编译任务生成任务名;编译服务器,用于解析所述任务名,获得相应的原始码,并进行编译,同时产生所述编译任务的处理状态信息提供给所述接口平台。
基本介绍
- 中文名 :编译系统
- 外文名 :Compiling system
- 分类1 :MTK分散式编译系统
- 分类2 :DM2预编译系统
- 分类3 :编译系统CMake
过程
接收输入的编译任务;根据所述编译任务生成任务名;解析获得所述任务名对应的原始码;编译所述原始码,并输出所述编译任务的处理状态信息。上述技术方案中,通过接口平台接收编译任务,由接口平台以任务名形式发起编译请求,进行编译,简化了编译输入操作;处理状态信息,通过接口平台实时提供给客户端,简化了编译监控操作,大大节约了人力资源。MTK分散式编译系统
众所周知,MTK平台使用ARM ADS进行编译,一千多个源档案,单机需要四五十分钟才能完成,如果机器开着防毒软体,速度会更慢。为了提高编译速度,可以把防毒软体暂时停掉,但是效果不会太明显。解决问题的根本做法是利用网内闲置的机器,搭建一个分散式系统,多台机器同时编译,可以收到明显效果。 本系统由注册服务器、编译服务器和客户端组成。网内启动一个注册服务器,多个编译服务器。在MTK6223平台上,单机new一次需要50分钟的项目,使用10个编译服务器同时编译,new一次需要13分钟。模组编译之前是在客户端工作的,需要9分钟,其中为了实现分散式编译,压缩原始码占用了2分钟,档案下载到编译服务器需要2分钟。 从第一个模组编译到最后link之前,10台机器仅用4分钟就完成了1200个c档案的编译工作。最后的link是在本机进行的,几十秒就完了。 我曾经试过18台机器同时编译,1200个c档案不到2分钟就编译完成了,当然下载时间需要3分钟。对于开发人员来讲,new一次不再是梦魇。 当然,不能无限制地增加编译服务器,要考虑档案传输所消耗的时间。MTK平台档案很多,需要由客户端向服务器分发。一般地,一个客户端与十个服务器联合编译可以达到理想效果。DM2预编译系统
预编译系统是DM2系统的重要组成部分。它支持在C程式中嵌入使用SQL语言,充分发挥语言数据类型丰富、处理方便灵活的优势,又以SQL语言弥补高级语言难以描述资料库操作的不足,为用户提供了建立大型管理信息系统和处理复杂事务所需要的工作环境。 预编译系统还支持互动式接口DM2-ISQL、套用开发工具集DM2-FORM、DM2-GRAPH、DM2-REPORT等工作环境。编译系统CMake
CMake就像是我们在uni上使用的make一样,是用来管理怎样编译一个project的。它的好处是: 1) 跨越多个作业系统平台,包括当前套用最广泛的windows,unix(包括Mac OS X). 2) 采用BSD风格的协定开放原始码。据我个人阅读协定档案,没发现协定与两句BSD协定有什么不同。 3) 它可以支持具有非常复杂的路径、库依赖的程式的编译。比如它支持编译个程式:它依赖于很多的库以及其它一些代码档案,而每一个库又有很多子目录。。。 4) 像很多Make一样,它会对曾经编译的档案做一些cache一遍加速以后的编译。 使用这个编译系统的时候,需要每个目录/子目录创建一个名为CMakeLists.txt的档案。 这个项目历史也算是比较悠久了,从2000年就开始了。 当前使用这个编译系统的项目:llvm/clang。。。 我就是从clang的原始码里发现的,邮件列表里有人推荐使用cmake,不要使用msvc的.sln档案反编译系统
高级语言源程式经过 编译 变成执行档,反编译就是逆过程。 但是通常不能把执行档变成高级语言原始码,只能转换成汇编程式。 计算机软体反向工程(Reversepengineering)也称为计算机软体还原工程,是指通过对他人软体的目标程式(可执行程式)进行“逆向分析、研究”工作,以推导出他人的软体产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,作为自己开发软体时的参考,或者直接用于自己的软体产品中。 反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前还是有许许多多的反编译软体: VB: VBExplorer ;只能反编译界面图像,好像代码不能完全反编译 JAVA: JAD ;java的反编译比较常见,所以反编译比较完全C++ : eXeScopeSymbian编译系统
所谓编译,就是在编译程式读取源程式(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的 汇编代码,再由汇编程式转换为机器语言,并且按照作业系统对执行档格式的要求连结生成可执行程式。 UNIX环境下的C编译系统所遵循的也是这么一个一般的过程。值得注意的是这个过程并不是有某个单个程式完成的,而是有多个分别完成某一方面工作的程式组合完成的。这一设计思想同我们最初提到的UNIX系统软体功能专一的特点是相符的。 归纳起来,可以将UNIX环境下C编译系统的工作过程下图所示。 C源程式头档案-->预编译处理(cpp)-->编译程式本身-->最佳化程式-->汇编程式-->连结程式-->执行档 一般我们用命令来完成对源程式的编译工作。此命令并不是一个二进制的可执行程式,而是一个shell命令档案。它的工作就是依次调用我们上面所列出的各个完成某部分工作的具体程式,将指定的c源程式转换成可执行的代码。 在UNIX系统中,实现C源程式到执行档的这一转换过程的工具是。在大多数系统中实际上是一个shell命令档案。有些系统中的C编译程式可能并不叫而是其它的一个什么名称,如Sun工作站上常用的g等等。但这些都无关紧要。大多数系统中C编译命令的用法基本上都是类似的。我们这里介绍的将以SVR4上的C编译系统为基础。 其中我们也要知道编译系统也是一个系统软体,而不是套用软体。