如何拒绝 MSVC 自行包含标头



我写了一个小C++代码,并在MSVS 2013中编译了它。它编译得很好。但是,我尝试使用 GCC 在 Ubuntu 上编译它,它给出了一个错误,我正在使用不存在的std::abs。然后我通过包含cmath来解决问题。

为什么MSVS没有抱怨?它本身是否包含一些标头。如果是,我怎么能拒绝 MSVS 包含它想要的任何内容,以便这种非跨平台代码消失?

它本身是否包含一些标头

虽然它可以根据项目设置做到这一点,但问题可能不是直接包含。MSVC(以及GCC)所做的也是在标头B中包含标头A,因为A在内部B中有一些需要的部分。作为副作用,当然你也会从标题 B 中获得其他符号......

如果是,我怎么能拒绝 MSVS 包含它想要的任何内容

如果不重写整个标头树,则无法。这(以及许多其他特定于编译器的东西)是同时使用 VS 和 GCC 进行编译的一个很好的理由,总是或至少定期进行编译,而不是首先使用一个编译器编写整个程序。(特别是如果VS是您的主要工具)。

最新更新