如何使C++ 0x和__STRICT_ANSI__相处?

Jon*_*rdy 23 c++ gcc gnu mingw c++11

我需要popen在项目中使用,但我得到:

error: 'popen' was not declared in this scope

看起来GCC __STRICT_ANSI__在两者之下定义-std=c++0x(与我能够找到的信息相反)-std=gnu++0x,这导致popen(和_popen)被省略stdio.奇怪的是,取消定义__STRICT_ANSI__并不能解决问题,也不会向前宣布该功能.我显然错过了一些东西.有合理的解决方法吗?

我使用的是MinGW 4.5.0,并升级到4.5.2,但我仍然遇到同样的问题.我宁愿不必使用msys来编译4.6.0,但如果必须的话,我会这样做.

Dam*_*mon 28

我只是立即在命令行上取消它,这不是非常"干净",但它可以正常工作.

-std=gnu++0x -U__STRICT_ANSI__
Run Code Online (Sandbox Code Playgroud)

可能有一个很好的理由为什么不应该这样做,但它给了我想要的东西(C++ 0x加上GNU扩展,加上遗留的东西仍然有用).我已经做了很长时间了,从来没有遇到过麻烦.但如果它吃了你的猫,不要怪我.

  • +1 与 Cygwin 下的 gcc 4.5.3 相同。唉,没有定义像 `vsnprintf` 这样的重要函数 `__STRICT_ANSI__`。显然,gcc 维护者并没有像应该的那样使用所有可能的`-std=xxx` 来编译他们的测试套件。 (2认同)

小智 8

我测试了MinGW gcc 4.6.1和gcc 4.7.0:它们都定义__STRICT_ANSI__-std=c++0x,但没有定义它-std=gnu++0x.

  • 如果有人想知道的话,`c ++ 11`和`gnu ++ 11`也是如此. (2认同)