许多流行的程序,例如 Microsoft Office,怎么可能是用 C、C++ 和汇编等语言编写的,而同一个安装程序却可以在任何具有适当操作系统的计算机上运行?是因为安装程序实际上是在计算机上编译源代码吗?是因为 AMD 和 Intel 共享基本相同的指令集吗?
我听说 C 是可移植的,但在什么意义上 Java 比 C 更便携?那么虚拟机的意义何在?
许多流行的程序,例如 Microsoft Office,怎么可能是用 C、C++ 和汇编等语言编写的,而同一个安装程序却可以在任何具有适当操作系统的计算机上运行?是因为安装程序实际上是在计算机上编译源代码吗?是因为 AMD 和 Intel 共享基本相同的指令集吗?
我听说 C 是可移植的,但在什么意义上 Java 比 C 更便携?那么虚拟机的意义何在?
原则上,C 是一种非常便携的语言。实际上只有两个可移植性问题的来源:
无效程序,其行为未定义或深入到“实现定义”领域,其方式在实现之间实际上有所不同,但恰好适用于它们所编写的任何操作系统/编译器/月相组合。
事实上,C 有一个非常轻量级的标准库,因此几乎任何有用的程序都依赖于进一步的接口(未在语言标准中定义)来与用户、操作系统和外部世界进行通信。
顺便说一句:就第二点而言,我们正处于超越这一点的边缘,除了 Windows 采用 POSIX 之外的每个相关的现实世界系统(该标准基本上扩展了 C 并为您提供了大部分缺少的东西在上面的第 2 点)。但随后出现了 Android 和 iOS,再次将事物碎片化......
如果您阅读任何有关 C 的历史以及其设计方式和原因的书籍,您会发现 C 旨在允许同一程序在不同的操作系统和硬件上运行