如何拒绝 MSVC 自己包含 headers
How to deny MSVC from including headers by itself
我写了一小段 C++ 代码并在 MSVS 2013 中编译它。它编译得很好。但是,我尝试使用 GCC 在 Ubuntu 上编译它,它给出了一个错误,我正在使用 std::abs
,它不存在。然后我通过包含 cmath
.
解决了这个问题
为什么 MSVS 没有抱怨?它本身是否包含一些 headers。如果是,我如何拒绝 MSVS 包含它想要的任何内容,以便这种非 cross-platform 代码消失?
Does it include some headers by itself
虽然它可以根据项目设置做到这一点,但问题可能不是直接包含。 MSVC(和 GCC)所做的也是将 header A 包含在 header B 中,因为 A 具有 B 内部需要的某些部分。作为副作用,当然你也会从 header B 得到其他符号......
If yes, how can I deny MSVS from including whatever it wants
如果不重写整个 header 树,您做不到。那(以及许多其他 compiler-specific 事情)是同时使用 VS 和 GCC 进行编译的一个很好的理由,始终或至少定期进行编译,而不是首先仅使用一个编译器编写整个程序。 (尤其是 如果 VS 是您的主要工具)。
我写了一小段 C++ 代码并在 MSVS 2013 中编译它。它编译得很好。但是,我尝试使用 GCC 在 Ubuntu 上编译它,它给出了一个错误,我正在使用 std::abs
,它不存在。然后我通过包含 cmath
.
为什么 MSVS 没有抱怨?它本身是否包含一些 headers。如果是,我如何拒绝 MSVS 包含它想要的任何内容,以便这种非 cross-platform 代码消失?
Does it include some headers by itself
虽然它可以根据项目设置做到这一点,但问题可能不是直接包含。 MSVC(和 GCC)所做的也是将 header A 包含在 header B 中,因为 A 具有 B 内部需要的某些部分。作为副作用,当然你也会从 header B 得到其他符号......
If yes, how can I deny MSVS from including whatever it wants
如果不重写整个 header 树,您做不到。那(以及许多其他 compiler-specific 事情)是同时使用 VS 和 GCC 进行编译的一个很好的理由,始终或至少定期进行编译,而不是首先仅使用一个编译器编写整个程序。 (尤其是 如果 VS 是您的主要工具)。