C+的可移植性如何+;? 在C++中,如果我用Linux编写一个简单的游戏,比如Pon,那么在Windows和OSX上编译的代码是相同的吗?哪里可以编译?< /p> < p>你可以阅读标准——如果程序遵守标准,它应该在所有有C++标准编译器的平台上编译。p>

C+的可移植性如何+;? 在C++中,如果我用Linux编写一个简单的游戏,比如Pon,那么在Windows和OSX上编译的代码是相同的吗?哪里可以编译?< /p> < p>你可以阅读标准——如果程序遵守标准,它应该在所有有C++标准编译器的平台上编译。p>,c++,cross-platform,C++,Cross Platform,对于您可能使用的第三方库,平台可用性通常在文档中指定 当涉及到GUI时,有跨平台的选项(比如QT),但您可能应该问问自己——当涉及到UI时,我真的想要可移植性吗?有时,最好让GUI部件特定于平台。C++具有超便携性,并且在更多平台上提供编译器,这是你无法做到的。像java这样的语言通常被吹捧为大规模跨平台,具有讽刺意味的是,它们实际上通常是C++实现的,或者C. 这包括“可移植性”。如果你实际上是指跨平台是C++,那么就不那么多了:C++标准只定义了一个适合控制台IO的IO库——即基于文本的,所

对于您可能使用的第三方库,平台可用性通常在文档中指定


当涉及到GUI时,有跨平台的选项(比如QT),但您可能应该问问自己——当涉及到UI时,我真的想要可移植性吗?有时,最好让GUI部件特定于平台。

C++具有超便携性,并且在更多平台上提供编译器,这是你无法做到的。像java这样的语言通常被吹捧为大规模跨平台,具有讽刺意味的是,它们实际上通常是C++实现的,或者C.</P> 这包括“可移植性”。如果你实际上是指跨平台是C++,那么就不那么多了:C++标准只定义了一个适合控制台IO的IO库——即基于文本的,所以一旦你想开发某种GUI,你就需要使用GUI框架——GUI框架在历史上非常特定于平台。Windows现在有多个“本地”GUI框架——微软提供的C++框架仍然是MFC——它封装了一个本地的Win32 API,它是一个C API。(WPF和WinForms可用于CLR C++)

苹果Apple的GUI框架称为COCOA,是Objto-C库,但在开发环境中,它易于从C++访问目标C。 <> Linux上有GTK+和QT框架,它们实际上都移植到Windows和Apple,所以其中的一个C++框架可以解决你在Windows上、在苹果Mac和Linux上建立和运行的“GUI应用程序如何编写C++”。


当然,它很难把Qt严格地看作是C++——Qt定义了一个特殊的标记,它需要一个预编译的编译步骤。对图形部分使用
OPENGL
可以让您在两种操作系统上自由运行程序,只要您不使用任何特定于系统的功能。

您有三个主要的可移植性障碍

第一个最简单的是编写所有目标编译器都理解的C++代码。注意:这与写C++标准不同。“按照标准写作”的问题始于:哪种标准?你有吗?这些都是对C++的修订,以及使用较不兼容编译器的更新版本。C++是非常大的,并且现实中你希望的最好的是C++ 98,它具有C++ 03的特性。 编译器都添加了自己的扩展,在不知不觉中使用它们太容易了。明智的做法是按照标准编写,而不是按照编译器文档编写。有些编译器有一种“严格”模式,在这种模式下,它们将关闭所有扩展。在编译器中进行初级开发是明智的,因为它具有最严格的要求和最好的标准遵从性

gcc
具有用于启用严格警告的
-Wstrict
标志系列<代码>-ansi将删除与标准冲突的扩展<代码> -STD= C++ 98 将告诉编译器工作在C++ 98标准下,删除GNUC++扩展。 记住这一点,为了保持理智,你必须将自己限制在少数几个编译器中,并且只使用它们的最新版本。即使为多个编译器编写一个相对简单的C库也很困难。幸运的是,Linux和OS X都使用gcc。Windows有VisualC++,但是不同版本比单个编译器更像是一个争吵的家庭,当涉及到兼容性(标准或相互)时,你必须选择一两个版本来支持。或者,您可以使用gcc派生的编译器环境之一,例如。请检查[ C++编译器列表]()以获得兼容性信息,但请记住这只是最新版本。

接下来是图形和声音库。它不仅必须是跨平台的,还必须在所有平台上看起来很好,速度也很快。现在有很多可能性,这是其中之一。您必须选择要在哪个级别编写代码。你想要详细的控制吗?或者你想要一台发动机来处理事情?因此,我不会详细说明。一定要选择一个致力于跨平台的,而不仅仅是碰巧工作的。图形库中的兼容性错误可能会使项目快速失败

最后,操作系统之间存在着简单的不兼容性。POSIX法规遵从性已经走了很长一段路,你很幸运Linux和OSX都是Unix的幕后黑手,但Windows永远是个怪人。可能对您不利的事情主要与文件系统有关。这里有几个:

  • 文件系统布局
  • 文件路径语法(即C:\foo\bar vs/foo/bar)
  • 不同的文件权限系统
  • 进程间通信的不同模型(即fork、共享内存等)
  • 不同的线程模型(您的图形库应该可以消除这种情况)
给你。真是一团糟,是吗?跨平台编程既是一种技术,也是一种心态和目的陈述。这需要一些奉献和额外的时间。你可以做一些事情来减少这一过程的痛苦

  • 打开所有限制和警告并修复它们
  • 关闭所有语言扩展
  • 在Windows中定期编译和测试,而不仅仅是在最后
  • 在项目中找到喜欢Windows的程序员
  • 尽可能少地使用编译器
  • 选择维护良好、支持良好的图形库
  • 隔离特定于平台的代码(例如,在