#ifdef _WIN32未被检测到

Mik*_*nen 6 c++ c++11

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

#ifdef _WIN32
#ifdef _WIN64
#ifdef OS_WINDOWS
Run Code Online (Sandbox Code Playgroud)

我用以下代码编译了以下测试: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;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

"you are on..."
Run Code Online (Sandbox Code Playgroud)

......没有其他任何东西得到满足.

eer*_*ika 7

#ifdef _WIN32
#ifdef _WIN64
Run Code Online (Sandbox Code Playgroud)

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


这里这里是几个编译器预定义的宏集合.

MinGW的 __MINGW32__

Cygwin的 __CYGWIN__


如果你不想构建大量ifdef - else树,并在互联网上搜索由晦涩的编译器定义的宏,以及它们的不同版本,我建议改为包含一些来自boost的头文件.他们已经完成了艰苦的工作.虽然,请注意与之BOOST_OS_WINDOWS分开BOOST_OS_CYGWIN.