我不能让#ifdef规则至少在Windows(64位)上工作.编译器版本是g ++ 5.4.0我试过:
#ifdef _WIN32 #ifdef _WIN64 #ifdef OS_WINDOWS
我用以下代码编译了以下测试:g ++ main.cpp
即使使用简单的代码:
#includeint 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.
这里和这里是几个编译器预定义的宏集合.
MinGW的
__MINGW32__
Cygwin的
__CYGWIN__
如果你不想构建大量ifdef - else树,并在互联网上搜索由晦涩的编译器定义的宏,以及它们的不同版本,我建议改为包含一些来自boost的头文件.他们已经完成了艰苦的工作.虽然,请注意与之BOOST_OS_WINDOWS
分开BOOST_OS_CYGWIN
.