首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到操作系统的名称?

问如何找到操作系统的名称?
EN

Stack Overflow用户
提问于 2013-03-23 05:30:37
回答 2查看 22K关注 0票数 14

问题很简单。我想要一个函数(C++)或方法,它可以在调用时返回如下内容

代码语言:javascript
复制
"Windows" //or
"Unix"

没有花哨,我不需要版本号或任何东西。只有操作系统名称。快速的谷歌搜索没有找到任何有用的东西,所以我想我应该在这里发布这篇文章

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-23 05:33:11

因为你不可能有一个可以在所有操作系统上运行的二进制文件,你需要重新编译你的代码。使用宏是可以的。

使用像这样的宏

代码语言:javascript
复制
_WIN32
_WIN64
__unix
__unix__
__APPLE__
__MACH__
__linux__
__FreeBSD__

像这样

代码语言:javascript
复制
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
}                      

您应该阅读编译器手册,看看它们提供了哪些宏来在编译时检测操作系统。

票数 32
EN

Stack Overflow用户

发布于 2013-03-23 06:33:58

来自Poco源代码:

Win32:

代码语言:javascript
复制
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:

代码语言:javascript
复制
std::string EnvironmentImpl::osNameImpl()
{
    struct utsname uts;
    uname(&uts);
    return uts.sysname;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15580179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档