Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用预处理器指令检查操作系统版本(Windows)?_C++_C_Operating System_C Preprocessor_Preprocessor Directive - Fatal编程技术网

C++ 如何使用预处理器指令检查操作系统版本(Windows)?

C++ 如何使用预处理器指令检查操作系统版本(Windows)?,c++,c,operating-system,c-preprocessor,preprocessor-directive,C++,C,Operating System,C Preprocessor,Preprocessor Directive,我想知道是否有机会检查我真正使用的Windows版本。类似于: 我尝试了MSDN中的代码: 但是他们中的任何一个都给了我很好的结果(例如:根据我的代码,当我在WindowsXP上即时通讯时,应该打印5.1,但它显示了5…) 有没有可靠的方法(我更喜欢预处理器指令的方法)来找出我使用的窗口 我的代码: #include <windows.h> #include <iostream> int main() { OSVERSIONINFO osvi; BO

我想知道是否有机会检查我真正使用的Windows版本。类似于:

我尝试了MSDN中的代码:

  • 但是他们中的任何一个都给了我很好的结果(例如:根据我的代码,当我在WindowsXP上即时通讯时,应该打印5.1,但它显示了5…)

    有没有可靠的方法(我更喜欢预处理器指令的方法)来找出我使用的窗口

    我的代码:

    #include <windows.h>
    #include <iostream>
    
    int main()
    {
        OSVERSIONINFO osvi;
        BOOL bIsWindowsXPorLater;
    
        ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
        osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    
        GetVersionEx(&osvi);
    
        // I HAD THIS, AND IT WAS WRONG! :<
        std::cout << osvi.dwMajorVersion << "\n";
    
        // CHANGED THE ABOVE LINE TO THE LINE BELOW AND IT IS OK NOW :D
        std::cout << osvi.dwMajorVersion << "." << osvi.dwMinorVersion << "\n";
    
    
        return 0;
    }
    
    #包括
    #包括
    int main()
    {
    OSVERSIONINFO osvi;
    布尔比斯波拉特;
    零内存(&osvi,sizeof(OSVERSIONINFO));
    osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
    GetVersionEx(&osvi);
    //我有这个,但它错了<
    
    std::cout您实际上得到了正确的结果。但您只打印了主要版本:

    std::cout << osvi.dwMajorVersion << "\n";
    

    std::cout使用预处理器指令设置有点困难。当您需要更新的功能时,您必须告诉标题是有原因的。@克里斯:好的,没有预处理器指令-可能吗?我只能说
    GetVersion
    之类的东西。我不确定您为什么会得到错误的答案。@mazix您怎么打电话来GetVersionEx函数?您只输出主要版本部分。
    if (osvi.dwMinorVersion >= 1) {
         std::cout << osvi.dwMajorVersion << "." << osvi.dwMinorVersion << std::endl;
    } else {
         std::cout << osvi.dwMajorVersion << std::endl;
    }