C / C++ 是不是跨平台语言?

发布于 2021-11-19 10:17:22 字数 55 浏览 976 评论 20

请问C /C ++是不是跨平台的语言?Java程序可以一次编译,到处运行,C/C++貌似没办法吧。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(20

女中豪杰 2021-11-21 10:42:03

这个"平台"的指向是不一样的,C/C++的平台是指操作系统平台,而Java的平台是JVM而不是直接的指向操作系统。任何Java程序是不是脱离JVM而在操作系统上独立运行的。所以Java自身就是一个平台,而且是兼容不同操作系统平台的平台。

爱的故事 2021-11-21 10:42:03

java平台是虚拟机,他能够跨兼容的虚拟机平台。sun的java和andorid就不兼容,虽然代码都高度类似。c主要是针对硬件平台的,他能运行的前提就是编译之后的二进制程序要能够有兼容的指令集和依赖的库才能运行。一些特殊情况下c无法跨平台,因为很可能是运行在自己定制的编译器和硬件上的。

只不过值得注意的透过软件方式以打破之前很多规定,比如wine使得很多windows程序可以直接在linux下运行,而虚拟化则是可以摆脱指令集的约束,比如在x86上运行arm的指令,当然可能会有性能的损失。

顾挽 2021-11-21 10:42:03

C当然不跨平台,跨平台就不是C了

岁吢 2021-11-21 10:42:03

Java就像那个特殊的插头,但它要依靠各种转换器,才能插到不同的插座上,如果没有转换器,它任何插座也插不上。这个转换器,就是Java VM。windows下有windows的转换器;linux有linux的转换器。Java做的转换器种类足够多,于是号称“跨平台”——你不用把我的插头拆开重新组装,就可以兼容不同插座!多牛逼呀!哪像C语言呀,碰到不同的插座,就要重新组装一次……

草莓味的萝莉 2021-11-21 10:42:03

楼主的选择答案其实不怎么样的。

那个什么插座的比喻根本就不合适!

其实除了UI界面以外,c/C++已经可以跨越很多平台了。

只要不涉及到系统底层的直接OS调用,完全可以一次编写到处运行。前提是使用跨平台的API库。

私藏温柔 2021-11-21 10:42:03

回复
Java是动态的虚拟机,当然可以一次编译到处运行了,甚至你可以不编译,直接拿源码到目标平台现场编译运行都没问题。你非要纠结是能跨平台运行,而不是跨平台语言这实在是没有什么道理的。。。

南汐寒笙箫 2021-11-21 10:42:03

回复
请注意,Java从来没说过“一次编写,到处运行”,Java从来都是说“一次编译,到处运行”。

顾挽 2021-11-21 10:42:03

回复
你把JVM和JDK的东西视为OS的API转换器?哈哈哈,看来你是掉进了电路板里出不来了。而且跨平台的真正含义就是一次编写到处运行,不管是否需要原程序重新编译或者花费很小的修改代价就是可以跨平台的!你把这个很小的effort视为准备什么插座?那如果我告诉你就算java也不能完全跨平台呢?跨平台不仅仅是指换了平台可以直接运行!你的跨平台定义太狭隘了。

噩梦成真你也成魔 2021-11-21 10:42:03

你的最后一句就说明了Java VM(API)的本质(这个跨平台的API不就是转换器?),证实了我的观点。但你最后一句和你前面几句一点关系都没有,甚至是矛盾的。

绝情姑娘 2021-11-21 10:42:03

我们讨论的不是“一次编写,到处运行”,而是"一次编译,到处运行“,编写是什么:准备铜片塑料片的过程;编译是什么:编译是用铜片塑料片组装插座的过程。同样数量的铜片塑料片(前提),Java只要按照Sun的样子组装(编译)一次就可以到处插了;而C/C++要每次根据不同的插座拆掉重新组装一次才行。而且C/C++的组装过程,一旦没摸清插座的孔数、大小、形状、电压等任何一个参数,组装就会失败。

狼亦尘 2021-11-21 10:42:00

对于一般人的确不重要,但是如果你从事的是面向多个平台的开发,那么跨平台就是决定性因素了。

柒夜笙歌凉 2021-11-21 10:41:55

回复
虽然我是新手,超级菜,不过我觉得跨平台很重要。

北笙凉宸 2021-11-21 10:40:28

回复
从你的问题看,你确实是个新手,因为只有新手才有这样的观点:1.跨平台很重要,2.编程语言不重要,编程思想才重要。

疾风者 2021-11-21 10:37:48

跨不跨平台无所谓,反正C和java的用途又不一样,现在基本上都是linux c

不乱于心 2021-11-21 10:28:22

说的没错,楼主就是没搞清楚什么是跨平台的真正含义(广义)。

累赘 2021-11-21 10:21:37

你得先搞清楚什么叫“跨平台”, 而且java也做不到完全跨平台, java程序在苹果的ios设备上就无法运行,C/C++, Java是两种不同类型和机制的语言, 其实现跨平台的方式完全不同, C/C++是编译型语言, 其实现跨平台的方式是统一的标准,通过特定平台的编译器将源代码编译成能在特定平台运行的程序, 而Java是基于虚拟机的语言, 它的程序是由各个平台上的java虚拟机来解释并执行。

为你鎻心 2021-11-21 10:13:10

Java运行需要依靠JVM,听了楼下的朋友说,坦白说,其实我也模糊了

屌丝范 2021-11-21 08:39:00

那“一次编辑,到处编译” 是不是跨平台呢 ?

情绪失控 2021-11-21 07:19:04

你说的真是精辟,这个比喻实在是太........

落墨 2021-11-20 00:33:15

回复
谢谢解惑了,跪拜大神

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文