【问题标题】:How to deny MSVC from including headers by itself如何拒绝 MSVC 本身包含标头
【发布时间】:2016-10-28 20:38:04
【问题描述】:
我写了一个小的 C++ 代码并在 MSVS 2013 中编译它。它编译得很好。但是,我尝试在 Ubuntu 上使用 GCC 编译它,它给出了一个错误,我正在使用不存在的 std::abs。然后我通过包含cmath 解决了这个问题。
为什么 MSVS 没有抱怨?它本身是否包含一些标题。如果是,我怎么能拒绝 MSVS 包含它想要的任何东西,这样这种非跨平台的代码就消失了?
【问题讨论】:
标签:
c++
visual-studio
gcc
cross-platform
【解决方案1】:
它本身是否包含一些标题
虽然它可以根据项目设置执行此操作,但问题可能不是直接包含。 MSVC(以及 GCC)所做的也是在标题 B 中包含标题 A,因为 A 有一些内部需要 B 的部分。作为副作用,您当然也会从标头 B 中获得其他符号...
如果是,我怎样才能拒绝 MSVS 包含它想要的任何内容
如果不重写整个标题树,你就做不到。这(以及许多其他特定于编译器的东西)是使用 VS 和 GCC 编译的一个很好的理由,总是或至少定期进行编译,而不是首先使用一个编译器编写整个程序。 (尤其是如果 VS 是您的主要工具)。