
为什么 C 不能像 java 那样跨平台?
6个回答
展开全部
C的源代码是跨平台的而编译后的目标文件和可执行文件就不是跨平台的。
因为针对不同的平台会用不同的编译器来编译和链接同样的源代码。
当然如果你的代码里有针对某种特定平台的代码的话(比如Windows API调用),那么用针对其它平台的编译器就会出错。
一般来说如果想写真正跨平台的源代码会用#define 来实现有条件的编译。
因为针对不同的平台会用不同的编译器来编译和链接同样的源代码。
当然如果你的代码里有针对某种特定平台的代码的话(比如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的程序是运行在JAVA虚拟机里面的,所以才能跨平台。但是JAVA虚拟机有不同平台版本。比如Linux版和Windows版本。所以你写的程序JAVA不用移植,但是要在不同平台安装相应版本虚拟机。
而C本身是在操作系统环境OS下运行的,不同平台编译支持的不一样。所以在换了平台以后由于运行环境不一样需要移植。不想JAVA都是在虚拟机里面运行。
而C本身是在操作系统环境OS下运行的,不同平台编译支持的不一样。所以在换了平台以后由于运行环境不一样需要移植。不想JAVA都是在虚拟机里面运行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java主要是有虚拟机,意思就跟模拟器一样,不同的系统只要能运行虚拟机,也就是玩游戏的那种模拟器,那就能玩这个游戏,java就是一个道理,c没有虚拟机,所以可移植性不好.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java可以跨平台是因为java运行在jvm上,jvm负责对个平台交互。。c也是可以跨平台的呀。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我也有这样的疑惑,我说说我的理解,不知道是否正确。就是在写c的时候得考虑程序运行时的硬件环境,如内存大小等。如果换平台,相同的源代码不一定能成功编译。而java就不需要考虑硬件环境,因为虚拟机屏蔽了与具体操作系统平台相关的信息。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询