7

有哪些资源可以帮助编写跨多个平台和编译器工作的 C/C++ 代码?例如,我经常发现自己问这样的问题:

  • 在各种编译器和环境中自动定义了哪些预处理器宏?(例如__GCC__, WIN32, __WIN32__, __CYGWIN__
  • 哪些版本的编译器和标准库支持相对较新的“标准”函数(例如 C99 长双三角函数 sinl()、cosl()...)
  • 当似乎不存在单一的可移植功能时,不同平台上有哪些功能可用于执行典型任务?(例如以亚秒精度获取当前时间)

我经常编写应该在 Linux/gcc、cygwin、mingw32 和 Visual Studio 下编译的代码,并且我经常需要比较来自多个来源(Linux 手册页、MSDN、编译器文档)的注释以获取我需要的信息。这一定是开发人员一直遇到的问题——是否有任何资源可以将这些信息编译成易于理解的参考?

(对于这个问题,我对 wxWidgets 或 boost 之类的跨平台库并不特别感兴趣。我对可以帮助某人编写自己的跨平台库或程序的资源或技术更感兴趣。)

编辑:这是我正在寻找的页面类型的一个示例:http: //predef.sourceforge.net/precomp.html。对各种编译器/环境以及可用于识别它们的预处理器宏进行了很好的调查。当不存在通用函数时,如果能找到一个类似的资源来比较跨平台的几乎等效函数(如 Linux 中的 gmtime_r() 或 ftime() 与 Windows 中的 _gmtime_s() 或 _ftime()),那就太好了。

4

4 回答 4

4

这是一种可能对您有用的资源预定义的 C/C++ 编译器宏

于 2009-06-09T17:42:03.747 回答
1

这真的取决于你的具体项目,但我会尝试

  • 如果可能,坚持使用符合 ISO 标准的代码和 POSIX;
  • 使用 -Wall 并消除所有警告;
  • 查看 autoconf 和 autotoolset 是否可以提供帮助。
于 2009-06-09T17:35:12.450 回答
1

编写跨平台代码的基本方法是编写不依赖于特定平台的代码。例如,几乎所有原始 UNIX 实用程序都可以在不参考特定平台的情况下编写。使用条件编译来编写依赖于特定宏的代码并不是最佳实践。

于 2009-06-09T17:10:33.463 回答
0

遵循 C/C++ 标准。

http://www.open-std.org/jtc1/sc22/wg21/docs/standards

于 2009-06-24T16:57:22.023 回答