问题很简单。我想要一个函数(C++)或方法,它可以在调用时返回如下内容
"Windows" //or
"Unix"没有花哨,我不需要版本号或任何东西。只有操作系统名称。快速的谷歌搜索没有找到任何有用的东西,所以我想我应该在这里发布这篇文章
发布于 2013-03-23 05:33:11
因为你不可能有一个可以在所有操作系统上运行的二进制文件,你需要重新编译你的代码。使用宏是可以的。
使用像这样的宏
_WIN32
_WIN64
__unix
__unix__
__APPLE__
__MACH__
__linux__
__FreeBSD__像这样
std::string getOsName()
{
#ifdef _WIN32
return "Windows 32-bit";
#elif _WIN64
return "Windows 64-bit";
#elif __APPLE__ || __MACH__
return "Mac OSX";
#elif __linux__
return "Linux";
#elif __FreeBSD__
return "FreeBSD";
#elif __unix || __unix__
return "Unix";
#else
return "Other";
#endif
} 您应该阅读编译器手册,看看它们提供了哪些宏来在编译时检测操作系统。
发布于 2013-03-23 06:33:58
来自Poco源代码:
Win32:
std::string EnvironmentImpl::osNameImpl()
{
OSVERSIONINFO vi;
vi.dwOSVersionInfoSize = sizeof(vi);
if (GetVersionEx(&vi) == 0) throw SystemException("Cannot get OS version information");
switch (vi.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
return "Windows 3.x";
case VER_PLATFORM_WIN32_WINDOWS:
return vi.dwMinorVersion == 0 ? "Windows 95" : "Windows 98";
case VER_PLATFORM_WIN32_NT:
return "Windows NT";
default:
return "Unknown";
}
}Unix:
std::string EnvironmentImpl::osNameImpl()
{
struct utsname uts;
uname(&uts);
return uts.sysname;
}https://stackoverflow.com/questions/15580179
复制相似问题