Linux 和 gcc 上没有 _fdopen

No _fdopen on Linux and gcc

我正在打电话 fdopen。在 Windows 上,使用 Visual C++ 2010,当我调用它时,我收到一条警告说

Warning 1 warning C4996: 'fdopen': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _fdopen.

在 Linux (g++ 4.8.2) 上有效。

当我切换到 _fdopen 时,Visual C++ 停止抱怨,但 g++ 找不到它。由于 g++ 确实找到了 fdopen,我认为这不是 here 所描述的问题。无论如何,我没有指定 -std=c++11 .

我应该使用 _fdopen 吗?我应该使用 fdopen 并忽略警告吗?

fdopen 不是 C++ 标准的一部分,而是 POSIX。虽然几乎每个 C++ 编译器维护者都希望满足 C++ 标准,但对于是否以及如何支持 POSIX 几乎没有达成共识。

本质上,fdopen 与任何完全特定于平台的功能属于同一类别;它只是在不同的系统上有所不同。如果警告让您感到厌烦,您可以使用一些预处理器的东西来使用 Windows 中的一部分代码和 Linux 中的另一部分代码,例如。在你自己的 fdopen-wrapper 中。

关于 _fdopen 符合 ISO C++ 标准的消息:C++ 标准说,开头带有 _ 的所有内容都是特定于编译器的。所以是的,在这一点上它是一致的。