使用Windows API的GetVersionEx()为何出现不兼容指针类型警告?
解决GetVersionEx与OSVERSIONINFOEX搭配的指针类型不兼容警告
警告原因
GetVersionEx函数的参数要求是LPOSVERSIONINFO(即指向OSVERSIONINFO结构体的指针),而你传入的是OSVERSIONINFOEX*类型的指针。虽然OSVERSIONINFOEX是OSVERSIONINFO的扩展结构体,内存布局的开头部分完全一致,但C语言编译器会严格检查指针类型,因此抛出不兼容警告。
解决方案
直接对参数进行强制类型转换,将OSVERSIONINFOEX*转为LPOSVERSIONINFO即可,这是合法操作,因为两个结构体的初始字段完全匹配:
OSVERSIONINFOEX osInfo; osInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); GetVersionEx((LPOSVERSIONINFO)&osInfo); // 强制类型转换消除警告 printf("%ld\n", osInfo.dwBuildNumber);
额外提示
从Windows 8.1开始,GetVersionEx已被微软标记为弃用函数,官方推荐使用VerifyVersionInfoW、GetFileVersionInfo或者通过查询系统文件版本等方式获取系统版本信息。如果是开发新应用,建议优先考虑这些替代方案。
内容的提问来源于stack exchange,提问作者loaded_dypper
相关产品推荐
相关产品推荐

