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

 我来答
百度网友27021c1535
2013-08-30 · TA获得超过219个赞
知道小有建树答主
回答量:483
采纳率:66%
帮助的人:177万
展开全部
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代码经过编译后,直接运行于虚拟机上,实现了跨平台。
YO_123
2013-08-30 · TA获得超过2700个赞
知道小有建树答主
回答量:981
采纳率:0%
帮助的人:945万
展开全部
JAVA的程序是运行在JAVA虚拟机里面的,所以才能跨平台。但是JAVA虚拟机有不同平台版本。比如Linux版和Windows版本。所以你写的程序JAVA不用移植,但是要在不同平台安装相应版本虚拟机。
而C本身是在操作系统环境OS下运行的,不同平台编译支持的不一样。所以在换了平台以后由于运行环境不一样需要移植。不想JAVA都是在虚拟机里面运行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闪亮的雷米
2013-08-30
知道答主
回答量:46
采纳率:0%
帮助的人:16.6万
展开全部
java主要是有虚拟机,意思就跟模拟器一样,不同的系统只要能运行虚拟机,也就是玩游戏的那种模拟器,那就能玩这个游戏,java就是一个道理,c没有虚拟机,所以可移植性不好.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无励
2013-08-30
知道答主
回答量:23
采纳率:0%
帮助的人:8.4万
展开全部
java可以跨平台是因为java运行在jvm上,jvm负责对个平台交互。。c也是可以跨平台的呀。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晓磨石
2020-02-20
知道答主
回答量:3
采纳率:0%
帮助的人:2126
展开全部
我也有这样的疑惑,我说说我的理解,不知道是否正确。就是在写c的时候得考虑程序运行时的硬件环境,如内存大小等。如果换平台,相同的源代码不一定能成功编译。而java就不需要考虑硬件环境,因为虚拟机屏蔽了与具体操作系统平台相关的信息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式