如果程序是用c ++编写的,可以在Windows上运行,是否必须完全重写才能在Mac OS或移动操作系统上运行?
答案 0 :(得分:5)
C ++是一种标准语言,这意味着您编写的源代码可以在任何具有C ++标准实现的平台上编译。有两种方法可以编写无法在不同实现上编译的C ++程序。首先,如果您使用仅在特定(一组)实现中找到的语言扩展。其次,使用依赖于标准库未附带的代码的库(如OS API)。
首先,请务必编写标准代码。对于第二个,使用跨平台库,如Boost,Qt ......
答案 1 :(得分:4)
通常,是的,因为程序需要使用特定于操作系统的功能进行窗口化,也可能需要使用其他功能(网络,同步等)。但是,许多程序试图通过构建包装器来尽可能地减轻这种情况类,以便大多数程序处理这些包装器而不是原始平台特定的工具。要将程序从一个平台移植到另一个平台,您只需使用新平台的工具重新实现包装器。
许多程序通过使用Qt或Boost等预先编写的库来处理一些跨平台的愚蠢行为,从而更进一步,但这(基本上)是更大规模的上述想法。
答案 2 :(得分:3)
这取决于。通常,标准C ++是一种通用的可移植语言,可以编译为在具有符合标准的编译器的任何系统或平台上运行。
但是,您可能希望添加到典型应用程序中的许多“有趣”功能不属于标准C ++。这包括GUI,线程,套接字和低级OS API调用。这些通常是不可移植的,并且需要为每个操作系统或平台单独实现使用这些功能的部分代码。
幸运的是,这并不像听起来那么令人生畏,因为现在有很多跨平台的库已经经历了这样做的麻烦。例如,Boost threading library已经为不同的平台或操作系统编写了线程代码,但所有这些都是在一个漂亮的统一API背后抽象出来的,可以在C ++应用程序代码中移植使用。
此外,许多非标准C ++代码仍然符合某些标准,例如POSIX,它支持多个平台。例如,大多数UNIX-ish系统(包括Linux和Mac OS X)都支持POSIX线程(pthread API)。
答案 3 :(得分:1)
如果代码本身使用所有目标平台都支持的库,那么您只需要相应的编译器为每个系统生成有效的二进制文件。
答案 4 :(得分:1)
软件可以用多种语言编写,然后链接在一起。例如,我可以用C ++编写应用程序的后端逻辑(通常使用Boost),然后在C#for Windows和Objective-C for Mac中构建两个单独的前端。我可以将C ++和C#组件链接到一个平台,然后将C ++和Objective-C组件链接到另一个平台。这种方法将为每个平台提供最“原生”的外观。
作为替代方案,我可以使用Qt或WxWidgets在C ++中编写整个前端代码。这将在所有平台上运行,尽管没有100%的平台的花里胡哨。