我无法让 #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..."
...没有其他任何东西被淘汰。
最佳答案
#ifdef _WIN32 #ifdef _WIN64
这些是由 MSVC 编译器定义的预定义宏。您似乎正在使用 g++
。这可能意味着 MinGW 或 Cygwin。
MinGW
__MINGW32__
Cygwin
__CYGWIN__
如果您不想构建庞大的 ifdef - else 树,并在互联网上搜索由晦涩的编译器及其不同版本定义的宏,我建议改为包含来自 boost 的一些 header 。 .他们已经完成了工作中最困难的部分。不过,请注意 BOOST_OS_WINDOWS
与 BOOST_OS_CYGWIN
是分开的。
关于c++ - #ifdef _WIN32 没有被检测到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591846/