编译式语言每次运行都需要编译
一般来说编译过后就成了基本上能执行的2进制代码。但是这些2进制代码并不完善,一个程序往往需要调用不止一部分的代码,所以需要把这些代码全部整合起来才能执行。
即时你的程序看起来只有一个文件,但是编译过后,多多少少里面至少会调用到一些操作系统功能,和其它的一些设置,所以依然需要组建这个过程把这个程序和这些系统默认的代码组建起来形成一个完成、单一的可执行文件。所以一般组建过程就包含了组建内部和外部代码,一般来说内部代码就是我说的系统预留的必要的一些代码(例如怎么具体完成把一些字符显示在屏幕上呀这些功能),而外部代码就是额外的调用自己写得或者别人写得其它程序功能(往往当你的程序调用了非c标准函数的时候)。
所以就算你的代码可以编译,但是可能因为组建并不成功(例如需要组建的代码本身有bug,或者丢失,或者版本不匹配),你的程序依然可能无法正确运行。
‘贰’ 为什么我每次编译都是全部重新编译
这里以 C 语言源程序为例,关于多个 C 语言源程序之间的编译顺序问题,这个是需要在 MAKEFILE 文本文件中写好多个 C 语言源程序的先后顺序,如果多个 C 语言源程序的先后顺序写得不正确,那么在使用 make 命令对 MAKEFILE 做相关的编译、链接工作时,就会把所有的 C 源程序都重新编译一遍(按理说:MAKEFILE 的最大好处就是:如果整个软件系统由多个 C 源程序组成,但是只有其中一个 C 源程序的代码做了改动,而其他的源代码没有做过任何改动,那么只需要编译这一个 C 源程序的目标文件,然后再和别的 C 源程序的目标文件相链接,生成最终的可执行文件即可,而不需要整个都重新编译一遍)
你再仔细把你的 MAKEFILE 文件中的各个 C 源程序的先后次序检查一下,看看是否写得有错误。写 MAKEFILE 文件也是需要仔细推敲的。
‘叁’ C#的可执行程序每一次运行时都要进行即时编译吗
仅供参考:
1、C#是静态的强类型语言,所以要先编译后运行。
2、你这个Exe文件,你是直接点击打开还是在项目文件中按F5启动呢,如果是按F5他默认还会进行编译,然后运行,如果是直接点击打开Exe,即是直接运行这个已经编译过的文件,
‘肆’ dec,c++为什么每次运行都要编译
因为编译就是把一个个语句编写成可执行文件,所以每次运行都必须编译。
‘伍’ 编译型语言和解释型语言的区别是什么
编译型语言和解释型语言的区别是翻译的时间点不同。
编译型语言:编译型语言在执行之前要先经过编译过程,编译成为一个可执行的机器语言的文件,比如exe。
因为翻译只做一遍,以后都不需要翻译,所以执行效率高。
解释型语言:解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。
执行时才翻译执行程序每执行一次就要翻译一遍。
编译型语言和解释型语言的详细介绍:
对于编译型语言,开发完成以后需要将所有的源代码都转换成可执行程序,比如Windows下的.exe文件,可执行程序里面包含的就是机器码。只要我们拥有可执行程序,就可以随时运行,不用再重新编译了,也就是“一次编译,无限次运行”。
在运行的时候,我们只需要编译生成的可执行程序,不再需要源代码和编译器了,所以说编译型语言可以脱离开发环境运行。
编译型语言一般是不能跨平台的,也就是不能在不同的操作系统之间随意切换。
对于解释型语言,每次执行程序都需要一边转换一边执行,用到哪些源代码就将哪些源代码转换成机器码,用不到的不进行任何处理。
每次执行程序时可能使用不同的功能,这个时候需要转换的源代码也不一样。
因为每次执行程序都需要重新转换源代码,所以解释型语言的执行效率天生就低于编译型语言,甚至存在数量级的差距。
计算机的一些底层功能,或者关键算法,一般都使用C/C++实现,只有在应用层面(比如网站开发、批处理、小工具等)才会使用解释型语言。
‘陆’ 关于“编译型语言”和“解释性语言”的区别
1、程序控制权不同:
对于解释性语言而言,程序运行时的控制权在解释器(jre,.net)而不再用于程序。编译型语言对于编译器而言,运行时的控制权在用户程序。
2、运行速度不同:
一些网页脚本,服务器脚本以及辅助开发接口这样的对速度要求不高,对不同系统的兼容性有一定要求的程序则通常使用解释性语言,如java、JavaScript、VBScript、Perl、Python、Ruby、Matlab等等。
编译语言由于程序执行速度快,同等条件下对系统的要求比较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++,Pascal/Object Pascal(Delphi)等都是编译型语言。
3、移植性不同:
解释型语言,例如Java语言,Java程序首先通过编译器编译成class文件,如果在Windows平台上运行,则通过Windows平台上的Java虚拟机(VM)进行解释。如果运行在Linux平台上,则通过Linux平台上的Java虚拟机进行解释执行。
所以说能跨平台,前提是平台上必须要有相匹配的Java虚拟机。如果没有Java虚拟机,则不能进行跨平台。
编译型语言,例如C语言,用C语言开发程序后,需要通过编译器把程序编译成机器语言(即计算机可以识别的二进制文件,因为不同的操作系统识别的二进制文件是不同的),所以C语言程序进行移植后,需要重新编译(如Windows编译成ext文件,Linux编译成erp文件)。
‘柒’ 为什么高级程序语言需要编译程序
计算机语言是人与计算机之间交流的媒介,其种类非常多,但大体上分为机器语言、汇编语言、高级语言三大类。
计算机不能直接理解高级语言,只能直接理解机器语言,因此必须将高级语言翻译成机器语言,翻译的过程分为两种,一种是解释,一种是编译。两种方式的区别在于翻译的时间,编译是在程序运行之前,需要一个专门的过程,将程序编译成为机器语言的文件,比如EXE文件,以后要运行的话就不用再重新编译了,直接使用之前的编译结果就行了,因为只翻译一次,运行时不需要再翻译,所以编译型语言的程序执行效率高。
解释性语言则不同,解释性语言不需要编译,其程序在运行时才翻译,每个语句都是执行时才翻译。这样解释性语言每执行一次就要翻译一次,其执行效率则相对较低。
另外,编译型语言以二进制形式保存,源代码不可见;解释性语言以代码形式保存。
‘捌’ c语言为何需要编译和连接才能运行
的文件(也称为源代码)而已,需要经过1定的处理才能转换成机器上可运行的可履行文件。
我们将对C语言的这类处理进程称为编译与链接。
‘玖’ 运行java程序时,为什么要先编译再运行,编译运行一起进行不行吗
java讲究的是 一次编译 处处运行,也就是提高了程序的一致性。java的程序之所在不同的操作系统上的运行结果是一样的,是因为java虚拟机。
所以要运行java都要装一个叫jdk的东西,里面有java的虚拟机。这个虚拟机就是来解释我们写的代码。通过这个虚拟机,就实现了代码的移植。
我们写好的程序,通过虚拟机,编译成class文件,然后在运行。但是我们只需要编译一次即可。
‘拾’ C 程序源代码每次运行都要编译连接才行吗
不用,只要没有修改,一次编译连接后,可直接运行生成的exe文件即可
如果修改过了,那么就只能重新编译连接了