Ⅰ 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、在链接过程中,需要重新调整其他目标文件中定义的函数调用指令,而其他目标文件中定义的变量也存在同样的问题。
Ⅱ 编译程序是什么意思编译是什么意思
编译程序(Compiler,compiling program)也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。
解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。
(2)编译语言目标扩展阅读:
结构:
编译过程分为分析和综合两个部分,并进一步划分为词法分析、语法分析、语义分析、代码优化、存储分配和代码生成等六个相继的逻辑步骤。这六个步骤只表示编译程序各部分之间的逻辑联系,而不是时间关系。
编译过程既可以按照这六个逻辑步骤顺序地执行,也可以按照平行互锁方式去执行。在确定编译程序的具体结构时,常常分若干遍实现。对于源程序或中间语言程序,从头到尾扫视一次并实现所规定的工作称作一遍。每一遍可以完成一个或相连几个逻辑步骤的工作。
可以把词法分析作为第一遍;语法分析和语义分析作为第二遍;代码优化和存储分配作为第三遍;代码生成作为第四遍。反之,为了适应较小的存储空间或提高目标程序质量,也可以把一个逻辑步骤的工作分为几遍去执行。
Ⅲ 在使用gcc编译c语言源程序时,如何使目标代码中包含调试信息
-g 生成调试信息
使用-g选项,可以在目标代码中包含调试信息。
Ⅳ 编译程序的作用
编译程序的作用是:将高级语言源程序翻译成目标程序。
编译程序是一种动作,是根据编译原理技术,由高级程序设计语言编译器翻译成机器语言二进制代码行为。编译程序是动名词,特指生成编译器的软件程序。编译程序是把用高级程序设计语言或计算机汇编语言写的源程序,翻译成机器语言格式目标程序的翻译程序。
属于采用生成性实现途径实现的翻译程序。编译程序以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出;编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。
编译程序的算法
编译程序的实现算法较为复杂。这是因为它所翻译的语句与目标语言的指令不是一一对应关系,而是一多对应关系;同时也因为它要处理递归调用、动态存储分配、多种数据类型,以及语句间的紧密依赖关系。
但是,由于高级程序设计语言书写的程序具有易读、易移植和表达能力强等特点,编译程序广泛地用于翻译规模较大、复杂性较高、且需要高效运行的高级语言书写的源程序。
Ⅳ c语言中编译后得到的目标文件为什么不能直接运行,必须连接后才能运行
一编译单元(一个c文件)就会得到一个目标文件,而最终程序是一个EXE。所以需要链接。
同时链接需要按照操作系统的可执行文件格式要求组织。
Ⅵ c语言生成的目标文件和汇编语言生成的文件有什么区别
汇编语言和二进制代码是有直接对应关系的,也就是说汇编语言在编译时是直接翻译就可以了,不存在优化的问题,所以汇编语言的编译器都相当小。
而c语言在编译时首先进行的是词法分析和语法分析,然后是优化,还会加入版本信息和一些防止溢出的判断,所以编译后的文件相比汇编直接写成的程序要大很多。然后c语言编译后的程序运行时其实是需要C
run-timelibrary的支持的
Ⅶ 编译原理t形图 源语言 表示语言 目标语言分别是什么啊,举个例子
编译器本身也是一个软件,该软件用何种语言编写的,比如是用c语言编写的,则c语言就是它的表示语言(一般说成实现语言)。编译系统的功能是翻译,它能把一种高级语言(即源语言)编写的程序等价的翻译成另一低级语言(即目标语言)的程序。
举例:
用 C语言实现一个java编译器,可以将java程序翻译成bytecode,则该编译器的源语言为java,目标语言为bytecode,表示语言是C。
Ⅷ 编译程序和解释程序均能产生目标程序吗
不能
因为:编译程序能产生目标程序而解释程序则不能
补充:解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间表示形式后再加以执行;编译程序(编译器)则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程,而在解释方式下,解释程序和源程序(或某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。解释器翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立的目标程序。
补充:编译程序(Compiler,compiling program)也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。它以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出。编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。