可以将C++编译成与平台无关的代码吗?为什么不?

rjo*_*shi 1 c++ cross-platform

是否有可能将C++程序编译到某个中间阶段(类似于java中的字节码),其中输出是独立于平台的,而不是以后在运行时编译/链接以在本机(平台相关)代码中运行?如果答案是否定的,为什么?

Ale*_*lli 14

这确实是可能的,例如参见LLVM.

  • 还有Adobes C++编译器输出Flash字节码. (2认同)

jal*_*alf 8

当然.请记住,C++标准仅指定行为:执行此程序时应该发生什么.它没有具体说明如何实施.

C++代码可以编译为中间格式,JIT可以编译为机器代码,也可以解释或者您喜欢的任何其他内容.


pli*_*nth 5

这是微不足道的,大多数编译器已经这样做了. gcc编译为RTL(寄存器传输语言),然后将其转换为目标CPU.

同样,托管C++和C++/CLI也编译为.NET.

最后,您可以考虑Church Turing论文,它是编程语言等价的声明,因此C++可以编译/转换为您最喜欢的平台独立语言(比如Perl,lisp,C--等).

  • Church-Turing论文在这里不适用,因为人们期望的任何编程语言远远超过仅计算可计算函数(除非该语言是APL).例如在J2SE Java中我可以在屏幕上绘图,但在标准C++中我不能.一旦考虑了环境以及可能被认为是"纯粹"的语言,那些语言的功能就不尽相同了. (2认同)