c++ - #ifdef _WIN32 没有被检测到

标签 c++ c++11

我无法让 #ifdef 规则至少在 Windows(64 位)上工作。 编译器版本是 g++ 5.4.0 我试过:

#ifdef _WIN32
#ifdef _WIN64
#ifdef OS_WINDOWS

我编译了以下测试: g++ main.cpp

即使是这样一个简单的代码:

#include <iostream>

int main()
{
  std::cout << "you are on...";

  #ifdef _WIN32
  std::cout << "Windows" << std::endl;
  #elif __linux__
  std::cout << "Linux" << std::endl;
  #endif

  return 0;
}

输出是:

"you are on..."

...没有其他任何东西被淘汰。

最佳答案

#ifdef _WIN32
#ifdef _WIN64

这些是由 MSVC 编译器定义的预定义宏。您似乎正在使用 g++ 。这可能意味着 MinGW 或 Cygwin。


Herehere是由多个编译器预定义的宏集合。

MinGW __MINGW32__

Cygwin __CYGWIN__


如果您不想构建庞大的 ifdef - else 树,并在互联网上搜索由晦涩的编译器及其不同版本定义的宏,我建议改为包含来自 boost 的一些 header 。 .他们已经完成了工作中最困难的部分。不过,请注意 BOOST_OS_WINDOWSBOOST_OS_CYGWIN 是分开的。

关于c++ - #ifdef _WIN32 没有被检测到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591846/

相关文章:

c++ - bool 数组在衰减方面的处理方式不同吗?

c++ Interlocked Ops 在 WinXP 上

c++ - 有人可以解释如何在模板中使用 result_of 吗?

c++ - boost::signals2 对于简单的应用程序是否矫枉过正?

c++ - `shuffle_order_engine` 是做什么用的?

c++ - 使用 opencv 显示视频

c++ - 让用户安全地运行任意查询我们的 MySQL 数据库

c++ - std::vector::reserve 是否保证在这种情况下实现不会使迭代器无效?

c++ - 是否有替换 X-macros 的模板/constexpr/C++11 方法?

c++ - boost::bind 无法绑定(bind)到纯虚基类中定义的非静态函数模板成员类型