我不能让#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)
......没有其他任何东西得到满足.
Run Code Online (Sandbox Code Playgroud)#ifdef _WIN32 #ifdef _WIN64
这些是由MSVC编译器定义的预定义宏.您似乎正在使用g++.这可能意味着MinGW或Cygwin.
MinGW的
__MINGW32__Cygwin的
__CYGWIN__
如果你不想构建大量ifdef - else树,并在互联网上搜索由晦涩的编译器定义的宏,以及它们的不同版本,我建议改为包含一些来自boost的头文件.他们已经完成了艰苦的工作.虽然,请注意与之BOOST_OS_WINDOWS分开BOOST_OS_CYGWIN.
| 归档时间: |
|
| 查看次数: |
2501 次 |
| 最近记录: |