请问C /C ++是不是跨平台的语言?Java程序可以一次编译,到处运行,C/C++貌似没办法吧。
这个"平台"的指向是不一样的,C/C++的平台是指操作系统平台,而Java的平台是JVM而不是直接的指向操作系统。任何Java程序是不是脱离JVM而在操作系统上独立运行的。所以Java自身就是一个平台,而且是兼容不同操作系统平台的平台。
java平台是虚拟机,他能够跨兼容的虚拟机平台。sun的java和andorid就不兼容,虽然代码都高度类似。c主要是针对硬件平台的,他能运行的前提就是编译之后的二进制程序要能够有兼容的指令集和依赖的库才能运行。一些特殊情况下c无法跨平台,因为很可能是运行在自己定制的编译器和硬件上的。
只不过值得注意的透过软件方式以打破之前很多规定,比如wine使得很多windows程序可以直接在linux下运行,而虚拟化则是可以摆脱指令集的约束,比如在x86上运行arm的指令,当然可能会有性能的损失。
C当然不跨平台,跨平台就不是C了
Java就像那个特殊的插头,但它要依靠各种转换器,才能插到不同的插座上,如果没有转换器,它任何插座也插不上。这个转换器,就是Java VM。windows下有windows的转换器;linux有linux的转换器。Java做的转换器种类足够多,于是号称“跨平台”——你不用把我的插头拆开重新组装,就可以兼容不同插座!多牛逼呀!哪像C语言呀,碰到不同的插座,就要重新组装一次……
楼主的选择答案其实不怎么样的。
那个什么插座的比喻根本就不合适!
其实除了UI界面以外,c/C++已经可以跨越很多平台了。
只要不涉及到系统底层的直接OS调用,完全可以一次编写到处运行。前提是使用跨平台的API库。
回复Java是动态的虚拟机,当然可以一次编译到处运行了,甚至你可以不编译,直接拿源码到目标平台现场编译运行都没问题。你非要纠结是能跨平台运行,而不是跨平台语言这实在是没有什么道理的。。。
回复请注意,Java从来没说过“一次编写,到处运行”,Java从来都是说“一次编译,到处运行”。
回复你把JVM和JDK的东西视为OS的API转换器?哈哈哈,看来你是掉进了电路板里出不来了。而且跨平台的真正含义就是一次编写到处运行,不管是否需要原程序重新编译或者花费很小的修改代价就是可以跨平台的!你把这个很小的effort视为准备什么插座?那如果我告诉你就算java也不能完全跨平台呢?跨平台不仅仅是指换了平台可以直接运行!你的跨平台定义太狭隘了。
你的最后一句就说明了Java VM(API)的本质(这个跨平台的API不就是转换器?),证实了我的观点。但你最后一句和你前面几句一点关系都没有,甚至是矛盾的。
我们讨论的不是“一次编写,到处运行”,而是"一次编译,到处运行“,编写是什么:准备铜片塑料片的过程;编译是什么:编译是用铜片塑料片组装插座的过程。同样数量的铜片塑料片(前提),Java只要按照Sun的样子组装(编译)一次就可以到处插了;而C/C++要每次根据不同的插座拆掉重新组装一次才行。而且C/C++的组装过程,一旦没摸清插座的孔数、大小、形状、电压等任何一个参数,组装就会失败。
对于一般人的确不重要,但是如果你从事的是面向多个平台的开发,那么跨平台就是决定性因素了。
回复虽然我是新手,超级菜,不过我觉得跨平台很重要。
回复从你的问题看,你确实是个新手,因为只有新手才有这样的观点:1.跨平台很重要,2.编程语言不重要,编程思想才重要。
跨不跨平台无所谓,反正C和java的用途又不一样,现在基本上都是linux c
说的没错,楼主就是没搞清楚什么是跨平台的真正含义(广义)。
你得先搞清楚什么叫“跨平台”, 而且java也做不到完全跨平台, java程序在苹果的ios设备上就无法运行,C/C++, Java是两种不同类型和机制的语言, 其实现跨平台的方式完全不同, C/C++是编译型语言, 其实现跨平台的方式是统一的标准,通过特定平台的编译器将源代码编译成能在特定平台运行的程序, 而Java是基于虚拟机的语言, 它的程序是由各个平台上的java虚拟机来解释并执行。
Java运行需要依靠JVM,听了楼下的朋友说,坦白说,其实我也模糊了
那“一次编辑,到处编译” 是不是跨平台呢 ?
你说的真是精辟,这个比喻实在是太........
回复谢谢解惑了,跪拜大神
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(20)
这个"平台"的指向是不一样的,C/C++的平台是指操作系统平台,而Java的平台是JVM而不是直接的指向操作系统。任何Java程序是不是脱离JVM而在操作系统上独立运行的。所以Java自身就是一个平台,而且是兼容不同操作系统平台的平台。
java平台是虚拟机,他能够跨兼容的虚拟机平台。sun的java和andorid就不兼容,虽然代码都高度类似。c主要是针对硬件平台的,他能运行的前提就是编译之后的二进制程序要能够有兼容的指令集和依赖的库才能运行。一些特殊情况下c无法跨平台,因为很可能是运行在自己定制的编译器和硬件上的。
只不过值得注意的透过软件方式以打破之前很多规定,比如wine使得很多windows程序可以直接在linux下运行,而虚拟化则是可以摆脱指令集的约束,比如在x86上运行arm的指令,当然可能会有性能的损失。
C当然不跨平台,跨平台就不是C了
Java就像那个特殊的插头,但它要依靠各种转换器,才能插到不同的插座上,如果没有转换器,它任何插座也插不上。这个转换器,就是Java VM。windows下有windows的转换器;linux有linux的转换器。Java做的转换器种类足够多,于是号称“跨平台”——你不用把我的插头拆开重新组装,就可以兼容不同插座!多牛逼呀!哪像C语言呀,碰到不同的插座,就要重新组装一次……
楼主的选择答案其实不怎么样的。
那个什么插座的比喻根本就不合适!
其实除了UI界面以外,c/C++已经可以跨越很多平台了。
只要不涉及到系统底层的直接OS调用,完全可以一次编写到处运行。前提是使用跨平台的API库。
回复
Java是动态的虚拟机,当然可以一次编译到处运行了,甚至你可以不编译,直接拿源码到目标平台现场编译运行都没问题。你非要纠结是能跨平台运行,而不是跨平台语言这实在是没有什么道理的。。。
回复
请注意,Java从来没说过“一次编写,到处运行”,Java从来都是说“一次编译,到处运行”。
回复
你把JVM和JDK的东西视为OS的API转换器?哈哈哈,看来你是掉进了电路板里出不来了。而且跨平台的真正含义就是一次编写到处运行,不管是否需要原程序重新编译或者花费很小的修改代价就是可以跨平台的!你把这个很小的effort视为准备什么插座?那如果我告诉你就算java也不能完全跨平台呢?跨平台不仅仅是指换了平台可以直接运行!你的跨平台定义太狭隘了。
你的最后一句就说明了Java VM(API)的本质(这个跨平台的API不就是转换器?),证实了我的观点。但你最后一句和你前面几句一点关系都没有,甚至是矛盾的。
我们讨论的不是“一次编写,到处运行”,而是"一次编译,到处运行“,编写是什么:准备铜片塑料片的过程;编译是什么:编译是用铜片塑料片组装插座的过程。同样数量的铜片塑料片(前提),Java只要按照Sun的样子组装(编译)一次就可以到处插了;而C/C++要每次根据不同的插座拆掉重新组装一次才行。而且C/C++的组装过程,一旦没摸清插座的孔数、大小、形状、电压等任何一个参数,组装就会失败。
对于一般人的确不重要,但是如果你从事的是面向多个平台的开发,那么跨平台就是决定性因素了。
回复
虽然我是新手,超级菜,不过我觉得跨平台很重要。
回复
从你的问题看,你确实是个新手,因为只有新手才有这样的观点:1.跨平台很重要,2.编程语言不重要,编程思想才重要。
跨不跨平台无所谓,反正C和java的用途又不一样,现在基本上都是linux c
说的没错,楼主就是没搞清楚什么是跨平台的真正含义(广义)。
你得先搞清楚什么叫“跨平台”, 而且java也做不到完全跨平台, java程序在苹果的ios设备上就无法运行,C/C++, Java是两种不同类型和机制的语言, 其实现跨平台的方式完全不同, C/C++是编译型语言, 其实现跨平台的方式是统一的标准,通过特定平台的编译器将源代码编译成能在特定平台运行的程序, 而Java是基于虚拟机的语言, 它的程序是由各个平台上的java虚拟机来解释并执行。
Java运行需要依靠JVM,听了楼下的朋友说,坦白说,其实我也模糊了
那“一次编辑,到处编译” 是不是跨平台呢 ?
你说的真是精辟,这个比喻实在是太........
回复
谢谢解惑了,跪拜大神