Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 跨平台C/C和#x2B的资源+;发展_C++_C_Portability - Fatal编程技术网

C++ 跨平台C/C和#x2B的资源+;发展

C++ 跨平台C/C和#x2B的资源+;发展,c++,c,portability,C++,C,Portability,有哪些资源可以帮助编写跨多个平台和编译器工作的C/C++代码?例如,我经常会问这样的问题: 在各种编译器和环境中自动定义哪些预处理器宏?(例如,\uuuuugcc\uuuuuuuuuu,WIN32,\uuuuuuuuuu WIN32\uuuuuuuuu,\uuuuuuuuuuuuuuuuuuuuuucygwin) 哪些版本的编译器和标准库支持相对较新的“标准”函数(例如C99长双三角函数sinl()、cosl()、…) 当似乎不存在单一的可移植功能时,在不同的平台上有哪些功能可用于执行典型任务

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

  • 在各种编译器和环境中自动定义哪些预处理器宏?(例如,
    \uuuuugcc\uuuuuuuuuu
    WIN32
    \uuuuuuuuuu WIN32\uuuuuuuuu
    \uuuuuuuuuuuuuuuuuuuuuucygwin
  • 哪些版本的编译器和标准库支持相对较新的“标准”函数(例如C99长双三角函数sinl()、cosl()、…)
  • 当似乎不存在单一的可移植功能时,在不同的平台上有哪些功能可用于执行典型任务?(例如,以亚秒精度获取当前时间)
我经常编写应该在Linux/gcc、cygwin、mingw32和visualstudio下编译的代码,并且我经常需要比较来自多个源(Linux手册页、MSDN、编译器文档)的注释来获得我需要的信息。这一定是开发人员一直遇到的问题——是否有任何资源可以将这些信息编译成易于理解的引用

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


编辑:这是我要查找的页面类型的示例:。对各种编译器/环境以及可用于识别它们的预处理器宏的详细介绍。如果能找到一个类似的资源,在没有公共函数存在的情况下比较不同平台上几乎相同的函数(比如Linux中的gmtime\u r()或ftime()与Windows中的gmtime\u s()或ftime()),那就太好了。

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

这实际上取决于您的具体项目,但我会尝试

  • 如果可能的话,坚持使用符合ISO标准的代码和POSIX
  • 使用墙壁并消除所有警告
  • 查看autoconf和autotoolset,看看它们是否有帮助

    • 这里有一个资源可能对您有用

      遵循C/C++标准


      原则上我同意,我会尽可能做到这一点,但在很多情况下,平台之间对于一些低级任务没有共同的功能。例如,如果希望将系统时间精确到毫秒,可以在Linux上使用ftime(),但在Windows上则称为ftime()。另一个例子是,在Linux构建中,您可能希望将默认配置路径设置为~/.myprogram,而在Windows上它应该位于%APPDATA%\myprogram中。如何使用boost和wxWidgets不是编写跨平台兼容代码的策略?这就像是要一些尝起来像葡萄但不全是葡萄的东西。