平台无关语言的真正含义是什么?

Noo*_*r69 1 c c++ java compiler-construction

为什么C/C++不像java那样被称为平台无关,因为用C/C++编写的相同源代码可以通过不同的编译器运行在不同的操作系统上,就像java中使用JVM一样。

不同的编译器和 JVM 不是在做同样的事情并实现平台独立性吗?

Joh*_*ode 5

不同的编译器和 JVM 不是在做同样的事情并实现平台独立性吗?

并不真地。您的 Java 程序在JVM 中运行,JVM 充当 Java 字节代码和本机机器代码之间的转换层。它对Java 应用程序代码隐藏了特定于平台的详细信息。

C 代码则不然。C 代码(通常)在本机运行,因此没有转换层将其与特定于平台的细节隔离。您的 C 代码可能会直接受到特定于平台的差异(字长、类型表示、字节顺序等)的影响。

严格遵守的C程序不使用标准库之外的任何内容,并且不会对超出语言标准所保证的最小值的类型大小或表示形式做出任何假设,因此在为其编译的任何平台上都应该表现出相同的行为。您需要做的就是针对目标平台重新编译它。

问题在于,现实世界中最有用的 C 和 C++ 代码并不严格遵循规范。要做几乎任何有趣的事情,您都必须依赖第三方和特定于系统的库和实用程序,一旦您这样做,您就会失去平台独立性。我可以编写一个命令行工具来操作本地文件系统中的文件,该工具可以在 Windows、MacOS、Linux、VMS 和 MPE 上运行;我需要做的就是为不同的目标重新编译它。但是,如果我想编写一些 GUI 驱动的东西,或者通过网络进行通信的东西,或者必须导航文件系统的东西,或者类似的东西,那么我就依赖于特定于系统的工具,而我不能只需在不同平台上重建代码即可。