#ifdef _WIN32未被检测到

时间:2017-01-11 13:09:55

标签: 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..."

......没有其他任何事情可以解决。

3 个答案:

答案 0 :(得分:6)

#ifdef _WIN32
#ifdef _WIN64

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

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

  

MinGW __MINGW32__

     

Cygwin __CYGWIN__

如果您不想构建大量的ifdef - else树,并在互联网上搜索由晦涩的编译器定义的宏及其不同的版本,我建议改为包含boost中的几个标题。他们已经完成了艰苦的工作。但请注意,BOOST_OS_WINDOWSBOOST_OS_CYGWIN分开。

答案 1 :(得分:2)

在cygwin中编译g ++时使用__CYGWIN32__来检测Windows。 (这是在32位和64位中定义的。)

_WIN32&amp; c。在这种情况下可能没有定义。对我来说不是。

(正如评论中所述;使用echo | g++ -dM -E输出定义的列表可能会有所帮助。)

答案 2 :(得分:-1)

是的,确实如此:

#ifdef _WIN32

有时在Windows上不起作用(!),在这种情况下,请改用以下形式:

#if defined(_WIN32)

我很惊讶,但是我看到了这个问题,对我有帮助!