c++ - 我怎样才能让 C++0x 和 __STRICT_ANSI__ 相处融洽?

标签 c++ gcc c++11 mingw gnu

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

error: 'popen' was not declared in this scope

看起来 GCC 在 -std=c++0x 和(与我能找到的少量信息相反)-std 下定义了 __STRICT_ANSI__ =gnu++0x,这会导致 popen(和 _popen)从 stdio 中删除。奇怪的是,取消定义 __STRICT_ANSI__ 并不能解决问题,也不能前向声明函数。我显然错过了一些东西。是否有合理的解决方法?

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

最佳答案

我只是立即在命令行上取消定义它,这不是非常“干净”,但据我所知它工作正常。

-std=gnu++0x -U__STRICT_ANSI__

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

关于c++ - 我怎样才能让 C++0x 和 __STRICT_ANSI__ 相处融洽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5580921/

相关文章:

c++ - 对象的生命周期

c++ - RenderTarget->GetSize 不工作

c - 抑制 "gcc -E"预处理代码输出中的注释

python - 与 Python 相比,Tensorflow C++ API 速度较慢

c++ - 循环写入文件时遇到问题

c++ - 为什么我们需要两个定义: integral constant expression and converted constant expression?

c++ - 配置软件时出错

c++ - 为什么数字类型只有一个 `to_string()`?

c++ - 使用 ENet 从 Cereal 发送二进制数据的 StringStream

c++ - 通用类型演绎斯科特迈耶斯