我无法让#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..."
......没有其他任何事情可以解决。
答案 0 :(得分:6)
#ifdef _WIN32 #ifdef _WIN64
这些是由MSVC编译器定义的预定义宏。您似乎正在使用g++
。这可能意味着MinGW或Cygwin。
MinGW
__MINGW32__
Cygwin
__CYGWIN__
如果您不想构建大量的ifdef - else树,并在互联网上搜索由晦涩的编译器定义的宏及其不同的版本,我建议改为包含boost中的几个标题。他们已经完成了艰苦的工作。但请注意,BOOST_OS_WINDOWS
与BOOST_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)
我很惊讶,但是我看到了这个问题,对我有帮助!