为什么GetSystemTimes#if出winbase.h?

时间:2012-05-08 18:35:43

标签: c++ c winapi

所以,GetSystemTimes winbase.h的声明(在我的机器上,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,但这似乎不对,我无法找到解释为什么会出现这种情况以及我的替代方案。有人在这里有一些见解吗?

3 个答案:

答案 0 :(得分:6)

它是#if因为在Windows NT v5.01,AKA Windows XP之前没有添加到API中。您的程序应该#define符号_WIN32_WINNT到最低目标Windows版本的十六进制值:请参阅Using the Windows Headers

如果您未定义_WIN32_WINNT,则会假定您定位的是最低公分母,并且它不提供较新的API功能。因此,如果您想使用它们,您需要将_WIN32_WINNT定义为适当的值,并了解您的代码将无法在旧版本的Windows上运行,这通常很好 - 没有人会抱怨您的代码没有不能在Windows 98上运行。

答案 1 :(得分:3)

根据MSDN documentation,,您提到的可能性是预期用途。虽然我同意你的看法,但这种做法可以让你构建针对具有不同最低操作系统版本的平台的项目,所以当目标机器上没有Windows API函数时,你不会感到惊讶。 / p>

答案 2 :(得分:-1)

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>