gpt4 book ai didi

c++ - 基于windows版本的c++条件编译

转载 作者:可可西里 更新时间:2023-11-01 09:28:24 25 4
gpt4 key购买 nike

我有一个应该在 XP 及更高版本中运行的 Windows 应用程序。但是 Windows API for XP 通常与 vista 及以上版本不同。我可以检查哪些条件编译标志以确定正在为哪个 Windows 操作系统编译代码?如果没有,有什么办法可以实现吗?

我觉得应该是这样的:

void SomeClass::SomeFunction()
{
// Other code

#ifdef WINXP
windowsXPCall();
#else
WindowsCall();
#endif

// Other code
}

最佳答案

答案取决于编译器和工具链。如果问题是关于 Visual C++,那么你应该这样标记它。

对于 VC++,支持的目标最低操作系统版本由 Using the Windows Headers 中描述的一组宏控制。 .

在最简单的情况下,要以 XP 为目标,您需要添加

#define _WIN32_WINNT 0x0501

在包含任何 Windows header 之前,或将 /D_WIN32_WINNT=0x0501 添加到编译器命令行。

如果您不需要支持原始版本的 XP(未应用任何服务包),请将 0x0501 替换为 0x0502,请参阅同一篇链接文章中的注释.

Note that some features introduced in the latest version of Windows may be added to a service pack for a previous version of Windows. Therefore, to target a service pack, you may need to define _WIN32_WINNT with the value for the next major operating system release. For example, the GetDllDirectory function was introduced in Windows Server 2003 and is conditionally defined if _WIN32_WINNT is 0x0502 or greater. This function was also added to Windows XP with SP1. Therefore, if you were to define _WIN32_WINNT as 0x0501 to target Windows XP, you would miss features that are defined in Windows XP with SP1.

附言控制你自己代码的源代码和编译标志的是你,所以我不确定如何回答原始问题的这一部分。

What conditional compilation flags can I check to determine which windows OS the code is being compiled for?

关于c++ - 基于windows版本的c++条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34100118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com