为什么 C 不能像 java 那样跨平台?

如题所述

C的源代码是跨平台的而编译后的目标文件和可执行文件就不是跨平台的。
因为针对不同的平台会用不同的编译器来编译和链接同样的源代码。
当然如果你的代码里有针对某种特定平台的代码的话(比如Windows API调用),那么用针对其它平台的编译器就会出错。
一般来说如果想写真正跨平台的源代码会用#define 来实现有条件的编译。追问

那不是与JAVA一样差不多了吗。C里特定平台的编译器,与JAVA的虚拟机不是一个意思吗,为什么java 却以跨平台著称呢

追答

标准C和标准C++都是源代码级跨平台的, 也就是说你用标准C/C++写的代码在windows下编译后就可以windows下运行, 在unix/linux下编译后就可以在unix/linux下运行.
跨硬件平台是靠编译器的,比如要输出一个字符,C里用printf("C");
硬件平台a用中断A输出, 硬件b用中断B输出, 那么就得有两个不同的编译器, 它们都用不同的方法实现C的功能

JAVA有个属于自己的运行环境,既:JAVA虚拟机,虚拟机与平台无关,JAVA代码经过编译后,直接运行于虚拟机上,实现了跨平台。

追问

那 java 的虚拟机又是如何实现跨平台的呢,它与 C 的跨平台又有何不同呢??

追答

虚拟机与平台无关
请仔细看我的回答。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-30
JAVA的程序是运行在JAVA虚拟机里面的,所以才能跨平台。但是JAVA虚拟机有不同平台版本。比如Linux版和Windows版本。所以你写的程序JAVA不用移植,但是要在不同平台安装相应版本虚拟机。
而C本身是在操作系统环境OS下运行的,不同平台编译支持的不一样。所以在换了平台以后由于运行环境不一样需要移植。不想JAVA都是在虚拟机里面运行。
第2个回答  2013-08-30
java主要是有虚拟机,意思就跟模拟器一样,不同的系统只要能运行虚拟机,也就是玩游戏的那种模拟器,那就能玩这个游戏,java就是一个道理,c没有虚拟机,所以可移植性不好.
第3个回答  2013-08-30
java可以跨平台是因为java运行在jvm上,jvm负责对个平台交互。。c也是可以跨平台的呀。
第4个回答  2020-02-20
我也有这样的疑惑,我说说我的理解,不知道是否正确。就是在写c的时候得考虑程序运行时的硬件环境,如内存大小等。如果换平台,相同的源代码不一定能成功编译。而java就不需要考虑硬件环境,因为虚拟机屏蔽了与具体操作系统平台相关的信息。

为什么java能夸平台,c不能
java用的是不同的jvm来实现跨平台,并不是java语言可以跨平台,能理解吗?比如说话,你会汉语,有个人既会英语,又会汉语,你和他可以交流,你要和老外说话,就要借助他做翻译,才可以交流.你是java语言程序,会多语言的人是jvm,老外是操作系统平台.不同的操作系统平台的jvm不同,就可以实现java的跨平台....

java语言跨平台是因为虚拟机,那么为什么C语言没有一个跨平台的虚拟机...
因为c主要用在嵌入式编程,面对的是多种多样的硬件设备,在多样性面前很难统一,写虚拟机维护与管理成本太高,没人愿意去做。除非硬件厂商都按一个标准,那么c就可以很轻松地拥有跨平台虚拟机。

java和c语言的区别
1、C语言代码不易跨平台,java代码易于跨平台;C语言可以直接操作内存,java不能直接操作;C语言可以封装动态库,java不起作用。2、Unix和Java都是用C语言编写的;C语言做单独的功能,可以提高效率,java适合Web应用程序开发;JAVA做网络开发的时候,已经有很多成型的框架技术,C语言很少,且需要处理底层内...

c#真的可以跨平台吗
从理论上说,C#是完全可以跨平台的。因为c#是借助.Net平台运行的,c#代码会被编译生成为MSIL,即微软中间语言,类似于Java的字节码,.Net是根据MSIL来执行的,而不是像C语言那样直接生成本地代码。C语言之所以无法跨平台,是因为进行与系统有关的操作的时候需要调用系统提供的函数,并编译成为本地代码,...

为什么JAVA运行要用到JAVA虚拟机,而 C 语言不用呢??
我跟你清除点说,java是一次编译到处运行的,听说过这句话吧。其实java这个到处运行的特性被java虚拟机来完成了,所以java必须要虚拟机。从另一个角度,java程序首先被编译成*.class文件,然后,虚拟机在将*.class文件编译成本地机器能执行的机器语言,这步是由java虚拟机完成的;与c不同,c编译时一...

C语言是不是跨平台的?
回答可以说是也不是。C的源代码是跨平台的而编译后的目标文件和可执行文件就不是跨平台的。因为针对不同的平台会用不同的编译器来编译和链接同样的源代码。当然如果你的代码里有针对某种特定平台的代码的话(比如Windows API调用),那么用针对其它平台的编译器就会出错。一般来说如果想写真正跨平台的...

java和c有什么区别
1、设计思路不同:C语言是面向过程的语言,执行效率高;Java是面向对象的语言,执行效率比C语言低。2、效率不同:C语言执行效率高;Java执行效率比C语言低。3、通用性不同:C语言不能跨平台;java可以跨平台直接移植。4、语法不同:基本数据类型不同:c语言的基本类型的位数和操作系统和机器相关,而...

Java和C的区别
具体原因是,Java是解释型语言,所有代码都会翻译成统一的、与系统无关的bytecode,然后放到JVM上运行;而C是编译式语言,代码要先通过编译器转换成与系统相关的中间代码,然后才能运行。再一个不同是,Java不支持系统调用,既无法与操作系统进行交互,这是由它跨平台的特点决定的,而C则可以调用系统中的...

java跨平台原理,其他语言为什么不可以
字节码文件不面向任何具体平台,只面向虚拟机。Java虚拟机是可运行Java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。Java语言具有一次编译,到处运行的特点。就是说编译后的.class可以跨平台运行,前提是该平台具有相应的Java虚拟机。但是性能比C\/C++要低。

java和c语言的区别
单文件的编译时间java比C语言快;C语言可以直接操作内存,java不能直接操作;C语言可以封装动态库,java不行;C语言的代码不容易跨平台,java的代码容易跨平台;C语言有指针,java没有指针;C语言可以直接操作串口,java需要第三方jar包支持;C语言的线程更加灵活,java的线程都已经封装好了;C语言做单独...

相似回答