⑴ 简述将源程序编译成可执行程序的过程
一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接。其中,编译是主要部分,其中又分为六个部分:词法分析、语法分析、语义分析、中间代码生成、目标代码生成和优化。
预编译:主要处理源代码文件中的以“#”开头的预编译指令。处理规则如下:
1、删除所有的#define,展开所有的宏定义。
2、处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。
3、处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。
4、删除所有的注释,“//”和“/**/”。
5、保留所有的#pragma 编译器指令,编译器需要用到他们,如:#pragma once 是为了防止有文件被重复引用。
6、添加行号和文件标识,便于编译时编译器产生调试用的行号信息,和编译时产生编译错误或警告是能够显示行号。
(1)探讨程序编译扩展阅读:
编译过程中语法分析器只是完成了对表达式语法层面的分析,语义分析器则对表达式是否有意义进行判断,其分析的语义是静态语义——在编译期能分期的语义,相对应的动态语义是在运行期才能确定的语义。
其中,静态语义通常包括:声明和类型的匹配,类型的转换,那么语义分析就会对这些方面进行检查,例如将一个int型赋值给int*型时,语义分析程序会发现这个类型不匹配,编译器就会报错。
⑵ 什么是编译程序 编译程序的工作过程
编译程序是变成语言在计算机上面运行的一种方式。
比如你现在编写(编译型语言)了你个程序文件并要运行它,但是计算机是不认识这个文件里面的东西的(其实计算机只认识0和1这样的数字),所以这里就需要把你自己写的程序文件翻译一遍,翻译过后并生成一个计算机能够识别的文件,把你原来的源文件翻译成计算机能够识别的文件的过程就叫编译,其实计算机运行的真正文件是编译过后的编译文件。
⑶ 什么是编译程序
编译程序指将某一种程序设计语言写的程序翻译成等价的另一种语言的程序的程序, 称之为编译程序
编译程序也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。
它以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出。编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。
编译程序的实现算法较为复杂,这是因为它所翻译的语句与目标语言的指令不是一一对应关系,而是一多对应关系,同时也因为它要处理递归调用、动态存储分配、多种数据类型,以及语句间的紧密依赖关系。
由于高级程序设计语言书写的程序具有易读、易移植和表达能力强等特点,编译程序广泛地用于翻译规模较大、复杂性较高、且需要高效运行的高级语言书写的源程序。
(3)探讨程序编译扩展阅读:
编译流程分为了四个步骤:
1.预处理,生成预编译文件(.文件)
2.编译,生成汇编代码(.s文件)
3.汇编,生成目标文件(.o文件)
4.链接,生成可执行文件
⑷ 什么叫程序的编译
编译程序词组可以有两种认识。一、编译程序是一种动作,是根据编译原理技术,由高级程序设计语言编译器翻译成机器语言二进制代码行为。二、编译程序是动名词,特指生成编译器的软件程序。
⑸ 程序的编译过程是怎样的程序的解释过程是怎样的
编译器首先用扫描程序扫描源代码,然后用语法分析程序分析得到语法树,然后经过语义分析、优化处理,最后通过代码生成程序得到目标代码的文件。
整个编译过程就是(扫描-语法分析-语义分析-优化-目标代码生成)。通常生成的是汇编代码,机器代码,可以直接执行,不需要解释。
而解释的过程只使用与解释型语言,这种语言只编译成一种中间文件,在运行时通过虚拟机读取中间文件进行解释运行。这种语言天生速度比较慢,但可以达到所谓的跨平台效果。
如果想深入了解,推荐看一看《编译原理》,如果只是想大概了解,推荐看一看《编译原理》的目录~呵呵
⑹ C语言中程序编译的正确理解及其含义
预处理。首先程序会被送给预处理器了。预处理器执行以#开头的命令(通常称为指令)。预处理器有点类似于编辑器,它可以给程序添加内容,也可以对程序进行修改。
编译。 修改后的程序现在可以进入编译器了。编译器会把程序编译成机器指令(即目标代码)。然而,这样的程序是不可运行的。
链接。 在最后步骤中,链接器把编译器产生的目标代码和所需的其他附加代码整合在一起,这样才最终产生完全可执行的程序。这些附加代码包括程序中用到的库函数(如printf函数)
⑺ 程序编译和程序编辑的区别是什么
编辑和编译是完全不同的概念.
编辑 是指程序代码、界面等的输入、构建,编辑等,在这期间,开发工具会对输入的代码进行一般的语法检查等,,在可视化以前的开发环境下,主要是指代码的输入、编辑。
编译 是指开发工具的编译程序对编辑过的代码进行转换,以便生成可以执行的代码文件,在可视化以前的开发环境下,编译都是在编辑工作完成以后进行的。
⑻ 怎么样将自己开发的Android应用程序编译到系统Image中
怎么样将自己开发的应用程序编译到Android系统呢?
本文不详细介绍编译环境的配置
下面咱们探讨在已经正确配置的环境下进行讲解如何将自己的应用程序添加到系统进行编译
首先将你的应用程序拷贝到packages/apps,然后到apps目录下的一个应用程序拷贝一个Android.mk
到你开发的应用程序根目录,下面打开Android.mk分析一下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := GalleryTest #这个是应用程序名字
LOCAL_PROGUARD_ENABLED := full
include $(BUILD_PACKAGE)
上面的是我刚开始使用的配置信息,搞了好久它就是没有编译到系统里面去。原因是
LOCAL_MODULE_TAGS :=
optional这个选项有问题,因为我编译的是eng版本,虽说optional表示在所有版本都可以编译,但是LOCAL_MODULE_TAGS 变量跟TARGET_BUILD_VARIANT
变量息息相关。后来将其改为eng则可以编译成功,当然如果你的是其它的则应该选用其它。下面顺便给出它的选项简介。
LOCAL_MODULE_TAGS :=user
eng tests optional
user:
指该模块只在user版本下才编译
eng:
指该模块只在eng版本下才编译
tests:
指该模块只在tests版本下才编译
optional:指该模块在所有版本下都编译除了上面的配置之外还需要在build/target/proct/generic.mk添加你的应用程序名字,如下:
PRODUCT_PACKAGES := \
AccountAndSyncSettings \
CarHome \
DeskClock \
AlarmProvider \
Bluetooth \
Calculator \
Calendar
\
Camera \
CertInstaller
\
DrmProvider \
Email
\
Gallery3D \
LatinIME
\
Launcher2 \
Mms
\
Music \
Provision
\
Protips \
QuickSearchBox
\
Settings \
Sync
\
Updater \
CalendarProvider
\
SyncProvider\
GalleryTest
这样就完成了配置,然后可以编译了。
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
⑼ 编译程序的各阶段都涉及到什么
预处理,词法分析,文法分析,生成中间代码,生成目标代码。
1、预处理:导入源程序并保存(C文件)。
2、编译:将源程序转换为目标文件(Obj文件)。
3、链接:将目标文件生成为可执行文件(EXE文件)。
(9)探讨程序编译扩展阅读:
将C语言代码分为程序的几个阶段:
首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。
编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分。
⑽ c语言程序编译过程包括哪四个
C语言编译过程分成四个步骤:
1,由.c文件到.i文件,这个过程叫预处理
2,由.i文件到.s文件,这个过程叫编译
3,由.s文件到.o文件,这个过程叫汇编
4,由.o文件到可执行文件,这个过程叫链接
用gcc查看预处理过程(假设源文件叫hello.c)
gcc -o hello.i hello.c -E
然后用 vi hello.i 即可查看生成的预处理文件
按ESC 输入:$ 跳到预处理文件 可看到hello.c源码
宏的本质:预处理阶段的单纯的字符串替换
预处理阶段,不考虑C语法