先编译后
A. 运行java程序时,为什么要先编译再运行,编译运行一起进行不行吗
java讲究的是 一次编译 处处运行,也就是提高了程序的一致性。java的程序之所在不同的操作系统上的运行结果是一样的,是因为java虚拟机。
所以要运行java都要装一个叫jdk的东西,里面有java的虚拟机。这个虚拟机就是来解释我们写的代码。通过这个虚拟机,就实现了代码的移植。
我们写好的程序,通过虚拟机,编译成class文件,然后在运行。但是我们只需要编译一次即可。
B. c语言源程序文件的后缀是什么,经过编译后生成文件的后缀是什么经过连接后生成文件的后缀是什么
程序文件名的后缀是.c,经过编译后是.obj,经过连接后是.exe。
xx.h文件.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。
xx.c文件.c文件一般放的是变量、数组、函数的具体定义。
1、头文件的预编译,预处理。
编译器在编译源代码时,会先编译头文件,保证每个头文件只被编译一次。
在预处理阶段,编译器将c文件中引用的头文件中的内容全部写到c文件中。
2、词法和语法分析(查错)。
3、编译(汇编代码,.obj文件)。
转化为汇编码,这种文件称为目标文件。后缀为.obj。
4、链接(二进制机器码,.exe文件)。
将汇编代码转换为机器码,生成可执行文件。
(2)先编译后扩展阅读
注意事项
在编译过程中.h文件中的所有内容会被写到包含它的.c文件中,而所有的.c文件以一个共同的main函数作为可执行程序的入口。
在.h文件中编写函数实现依然可以正常编译执行,相当于所有.h的内容最后都被写到了main.c文件中。
但是为了逻辑性、易于维护性以及一些其他目的,一般在.h文件中写函数的声明,在.c文件中编写函数的实现。
C. 突然想知道,为什么有的语言需要编译之后运行,而有的语言则不需要呢 C, ruby 请分析谢谢!
我们用的大部分程序设计语言都是高级语言,高级语言要执行,必须要先变成计算机能识别的汇编语言.将高级语言变成汇编语言的过程叫做翻译,目前有两种形式的翻译方法,一种是编译,一种是解释.C就属于编译方式,执行前一定先编译一次.而B语言就是解释方式,解释一条执行一条,所以执行先不需要编译一下.
D. C++运行前要经过什么步骤,先编译,再链接最后运行
你说的没错。但现在的开发环境一般是集成化的,可以编译、连接、执行一起在IDE(集成开发环境)中连续运行,不需要任何命令,鼠标点“运行”即可。
E. 一个C语言源程序经过编译后就可以执行了 这句话对吗
对的,C语言是先编译后执行,一般只要不出错误,编译完就可以执行力。有时候还要考虑是否跨平台。
F. 涓轰粈涔堢▼搴忚佸厛缂栬疟锛屾墠鑳借繍琛屽晩锛
褰撶紪鍐椤畬涓涓绋嫔簭钖庯纴闇瑕侀栧厛杩涜岀紪璇戯纴铹跺悗鍐嶈繍琛屻
濡备笅锲炬墍绀猴纴绋嫔簭缂栧啓瀹屾瘯钖庯纴镣瑰嚮宸ュ叿镙忎腑镄凟xecute,阃夋嫨compile(缂栬疟锛
濡傛灉娌℃湁阌栾锛屽啀阃夋嫨Execute,阃夋嫨run锛堣繍琛)
镓╁𪾢璧勬枡
缂栬疟灏辨槸鎶婇珮绾ц瑷鍙樻垚璁$畻链哄彲浠ヨ瘑鍒镄2杩涘埗璇瑷锛岃$畻链哄彧璁よ瘑1鍜0锛岀紪璇戠▼搴忔妸浜轰滑镡熸倝镄勮瑷鎹㈡垚2杩涘埗镄勚缂栬疟绋嫔簭鎶娄竴涓婧愮▼搴忕炕璇戞垚鐩镙囩▼搴忕殑宸ヤ綔杩囩▼鍒嗕负浜斾釜阒舵碉细璇嶆硶鍒嗘瀽锛涜娉曞垎鏋愶绂璇涔夋镆ュ拰涓闂翠唬镰佺敓鎴愶绂浠g爜浼桦寲锛涚洰镙囦唬镰佺敓鎴愩备富瑕佹槸杩涜岃瘝娉曞垎鏋愬拰璇娉曞垎鏋愶纴鍙堢О涓烘簮绋嫔簭鍒嗘瀽锛屽垎鏋愯繃绋嬩腑鍙戠幇链夎娉曢敊璇锛岀粰鍑烘彁绀轰俊鎭銆
缂栬疟璇瑷鏄涓绉崭互缂栬疟鍣ㄦ潵瀹炵幇镄勭紪绋嬭瑷銆傚畠涓嶅儚鐩磋疟璇瑷涓镙凤纴鐢辫В閲婂櫒灏嗕唬镰佷竴鍙ヤ竴鍙ヨ繍琛岋纴钥屾槸浠ョ紪璇戝櫒锛屽厛灏嗕唬镰佺紪璇戜负链哄櫒镰侊纴鍐嶅姞浠ヨ繍琛屻傜悊璁轰笂锛屼换浣旷紪绋嬭瑷閮藉彲浠ユ槸缂栬疟寮忥纴鎴栫洿璇戝纺镄勚傚畠浠涔嬮棿镄勫尯鍒锛屼粎涓庣▼搴忕殑搴旂敤链夊叧銆
G. 用c语言编写的源程序需要用编译程序先编译成由机器语言组成的目标程序,在经过( )后才能得到可执行程序
源代码需经过编译和链接,才可生成可执行文件。
由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。 例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。
链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体。
根据开发人员指定的同库函数的链接方式的不同,链接处理可分为两种:
(1)静态链接
在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。
(2) 动态链接
在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。
对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。