为什么GetSystemTimes #if 退出winbase.h?
Why is GetSystemTimes #if'd out of winbase.h?
所以,winbase.h
中GetSystemTimes
的声明(在我的机器上,Windows 7 VS2005)
#if _WIN32_WINNT >= 0x0501
BOOL
WINAPI
GetSystemTimes(
__out_opt LPFILETIME lpIdleTime,
__out_opt LPFILETIME lpKernelTime,
__out_opt LPFILETIME lpUserTime
);
#endif
当然,我可以#define _WIN32_WINNT 0x0501
,但这似乎不对,我找不到解释为什么会这样以及我的替代方案是什么。 有人在这里有一些见解吗?
它
被#if
了,因为它直到Windows NT v5.01(又名Windows XP)才被添加到API中。 程序应将符号_WIN32_WINNT
#define
为最低目标 Windows 版本的十六进制值:请参阅使用 Windows 标头。
如果未定义 _WIN32_WINNT
,则假定您以最低公分母为目标,并且不提供更新的 API 功能。 因此,如果你想使用它们,你需要将_WIN32_WINNT
定义为一个适当的值,并了解你的代码不会在旧版本的Windows上运行,这通常很好 - 没有人会抱怨你的代码不能在Windows 98上运行。
根据 MSDN 文档,您提到的可能性是预期用途。 虽然我同意你的看法,这看起来很奇怪,但这种做事方式让你可以构建针对具有不同最低操作系统版本的平台的项目,所以当Windows API函数在目标计算机上不可用时,你不会感到惊讶。
GetSystemTimes()
Winbase.h
中声明
#if _WIN32_WINNT >= 0x0501 // look at this
BOOL
WINAPI
GetSystemTimes(
LPFILETIME lpIdleTime,
LPFILETIME lpKernelTime,
LPFILETIME lpUserTime
);
#endif // (_WIN32_WINNT >= 0x0501)
像这样使用包含:
#define _WIN32_WINNT 0x0501
#include <Windows.h>
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 程序在执行程序的其余部分之前退出
- 构造函数在退出函数时无法初始化一个参数
- 为什么异常不退出程序?
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 退出简单while循环时出现问题
- 使用vscode调试时,GDB意外退出
- pclose() 不会给我进程退出代码
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++从另一个函数退出函数
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++逗号分隔的输入数组代码过早退出
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 为什么 C++ 中的以下结构声明会导致退出 127?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 为什么GetSystemTimes #if 退出winbase.h?