未找到 c++11 上的 popen

popen on c++11 not found

我正在尝试 运行 以可移植的方式从 c++ 程序中获取 gnuplot。具有讽刺意味的是 WIN_32 我没有问题,但我的编译器 (visual studio 2015) 无法识别我试图用于其他 OS。 C++11 中不存在 popen() 吗?是否有等效项或者我必须更改标准?

此编译并 运行s in windows visual studio 2015 :

#include <stdio.h>
#include <stdlib.h>

int main()
{
  _popen(" ", "w");
  return 0;
}

这不编译:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  popen(" ", "w");
  return 0;
}

错误 错误 C3861 'popen': 找不到标识符
归根结底,我想要

这样的行为
#include <stdio.h>
#include <stdlib.h>

int main()
{
  #ifdef WIN_32
    _popen(" ", "w");
  #else
    popen(" ", "w");
  #endif
  return 0;
}

我希望这个程序在 Linux 和 Mac 上使用时在 g++ 中重新编译,但我想使用 msvc14 在 windows

上编译

popen() 在 C++(任何版本)中确实不存在。它由 posix 定义,因此在大多数类似 unix 的操作系统上可用。

windows 上没有 popen() 函数,但是有等效的 _popen() 函数可以使用

MSVC 预先定义了 _WIN32 常量,你可以用它来进行条件编译,例如

#ifdef _WIN32
   _popen(" ", "w");
#else
    popen(" ", "w");
#endif