编译器
本身就是一个应用程序,编译器涉及到底层的一些操作,对执行要求比较高的地方使用汇编语言编写的,主要的还是用C语言来编写实现的,在Java的安装路径下的bin目录下有很多的*.exe可执行文件,像jar.exe、javac.exe、java.exe等等,Java编译器这东西它好像不是开源的,如果你对编译器的实现感兴趣的话,推荐你看一本《
编译原理
》这本书,这本书对你了解编译器的实现原理有很大的帮助的。
② VC如何用编译器将自己的源代码转换成目标软件,可以执行打开的软件,编译成exe文件是所有文件编译的结果
至于生成什么文件应该看楼主需要进行设置,一般默认都会生成.EXE文件,
首先先从文件说吧,不管什么格式都是一个文件,里面都是数字也就是代码,而我们在软件里常用的文件格式一般是头文件(.h .hpp以h开头等),代码实现文件(.c .cpp等),里面装的也就是程序代码。
Windows(一般用VC写的程序)程序分为 程序代码 和 UI(User Interface用户接口)资源 两大部分,两部份最后以RC编译器整合为一个完整的EXE 文件。
所谓UI 资源是指功能菜单、对话框外貌、程序图标、光标形状、图片等等东西。这些UI 资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico、.bmp、.cur 等等,这需要楼主在VC的资源(RC)编辑器里去搞,
过程就是,你点击运行时,首先C编译器编译(所有的,当然会有先后顺序这要看编译器了).cpp文件并(.h 不会编译不然就不要#include了~~)生成.OBJ文件(其中进行语法检查,转换成汇编,再转换成二进制代码等);提示一下,如果你在VC中有图片呀,按钮呀之类的是RC编译器在你添加后自动做好的文件,它就是以图形的形式显示给你看而已,在C编译的同时RC编译器将这些图片呀之类的搞成一个.RES的文件,再之后就是连接了,连接器把.OBJ .RES再弄成.EXE文件,
其实楼主先把这些比较核心和基础的搞懂就OK了,希望楼主是VC界一代新秀啊~~~~~~
③ 源码怎么编译
使用编译器如VC++6.0,VC++2008
④ 如何用编译器将自己的源代码转换成目标代码
我们使用编译器将自己的源代码转换成目标代码, 使用链接器将我们的目标代码链接成一个可执行程序。另外, 我们使用一些程序在计算机中输入源代码文本并且编辑它。这些是最初的和最重要的工具, 它们构成程序员的工具集合或“程序开发环境”。 如果你使用的是命令行窗口, 就像很多专业程序员所做的那样, 你将不得不自己来编写编译和链接命令。如果你使用IDE(“交互式开发环境”或“集成式开发环境”), 就像很多程序员所做的那样, 简单地点击正确按钮就可以完成这个工作。附录C介绍了如何在你的C++实现中编译和链接。 IDE通常包括一个具有有用特性的编辑器, 例如用不同颜色的代码来区分你的源代码中的注释、 关键字和其他部分, 以及其他帮助你来调试代码、 编译和运行代码的功能。调试是发现程序中的错误和排除错误的活动, 你在前进的道路上会听到很多有关它的内容。 我们使用微软的Visual C++作?喑炭 ⒒肪呈道 H绻 颐羌虻サ厮怠氨嘁肫鳌被蚴恰癐DE”的某些部分, 那就是所指Visual C++系统。但是, 你可以使用一些提供最新的、 符合标准的C++实现的系统。我们所说的大多数内容(经过微小的修改)对所有的C++实现都将是正确的, 并且其代码可以在任何地方运行。在工作中, 我们使用几种不同的实现。
⑤ 可否谈一下C++编译器大致是如何把C++源代码编译成目标代码的
大致分成以下几个阶段:并以以Linux下的GCC编译器举例
第一阶段:预处理,这个阶段处理宏等
第二阶段:编译,包括语法检查,头文件检查等
g++ -c name.o name.cpp name.h 生成目标文件
第三阶段:链接,包括静态链接与动态链接
g++ -o name name.o 生成汇编文件,可以直接运行
⑥ Java程序源码保存时使用GBK编码保存,编译成字节码文件时编译器是不是需要使用GBK解码后再编译呢
JavaC可以有选项指定源文件编码,不对的话会出错或乱码
⑦ C#源代码编译成为本地代码的编译过程
很有兴趣的话,可以去阅读下JeffreyRitchie的《ClrviaC#》,目前出到第三版,英文好的话强烈推荐看英文版的,而且我有该电子书和实体书。
下面讲下我的理解:大致上不会出什么差错的,细节部分你可以参照上面的书籍!
1.首先,c#源码经过c#编译器被编译成托管模块(IL中间代码、元数据(Metadata))
2.然后,使用C#编译器以及程序集链接器(AssemblyLinker----AL.exe)将上述托管模块以及项目的资源文件Combine(整合)成一个程序集(Assembly)
上述程序集就是你所看到的exe文件或者dll文件等等,程序集中包含了manifest描述文件,是该程序集内容以及关系的一个清单,具体的内容你可以参见JR的书跟Java中的类似!
双击该exe运行的时候:
3.最后,运行时,CLR装载对应的程序集,使用内部的三个即时编译器(常用的为JIT),再去根据本机的环境去进行相应的优化(针对CPU优化等等),即时的翻译成本地机器指令去执行。
还有一个本地化代码生成工具,NGen.exe~~
这个最好能去看看那本JR的神作!细节不是我三言两语能讲清的~~
⑧ 编译器 是如何让源代码生成文件的
要知道...电脑看的东西跟人看的东西是不一样的
电脑看得明白的就只有1跟0
编译器就是以一个人可以看得明白的环境下
让人写出可以翻译成电脑看得明白的东西
再把那东西变成0跟1的工具
要不用编译器也可以
不过你就要懂电脑的语言才可以
一个比较容易明白的例子
你是中国人, 只会说中文
对着一个只会说英文的英国人
你怎说他也不会明白
除非, 你们中间有一个人可以把中文翻译成英文跟把英文翻译成中文
这样才可以沟通
不然唯一的方法就是你去学英文
因为现在是你要跟那英国人说话, 对方可没东西跟你说
----------------------------------------------------------
我是说编译器出了将源代码翻译成2进刺外还添加了什么菜形成了文件这个找的到得实体
->当然会有些所谓的header..不过那些不重要
它生成文件时是不是还添加了什么实体生成代码
->跟上面的回答一样, 不过内容基本上都是你写的东西
文件是不是将这些代码和在一起再起了个名字这么简单呢?
->这样想也可以...不过名字其实也是你自己起的....
但是即使是这样它又用什么代码将这些代码和成的呢?
->就是根据所谓的syntext去作为一程规定, 去把交字变成binary
要不然我直接在文本文档里写机器码问什么不能运行呢?
->可以, 不过你要肯定你打出来的东西不是文字的0跟1, 而是在binary层面上的0跟1
--------------------------------------------------
我还想问一下什么叫文件?
->开得到 看得到的都可以叫成文件(资料夹除外)
文件时怎样生成的它问什么能自动在硬盘上占用一定的空间 机器码与文件有哪些区别呢?
->如果你以0和1的角度来看, 文件其实也是一堆机器码, 只是这堆机器码所代表的是文字(或其他东西, 例: 图) 而不是可以执行的程式
文件到底是怎样的集成机制
->也是0跟1
还有header是什么意思
->一般就是用来宣告是用哪程语言写出来的/由哪里开始执行, 类似这样的东西, 不过真的不重要(在写程式的层面上)
⑨ 编译程序把源代码编译为的目标代码是什么代码是不是汇编
这个问题比较复杂,其实来说,编译器可以翻译高级语言为任何低级语言或机器语言。像JAVA,.NET的编译器是编译结果是中间代码(可以理解为一种低级语言),由相应解释器执行;像C之类的编译以后可以是根据不同平台相应的机器码,就是01组成的编码,由对应平台的计算机直接执行;除此以外,gcc等也可以将C编译为汇编输出!
建议学习《编译原理》这门课程,你会有更深的理解。