我有一个自己的小头文件,它声明了几个函数,其中一个函数的返回类型为 DWORD
.懒得拖了windows.h
只是为了获得这种类型的官方定义,因为该文件很大,而且我的 header 将用于许多不需要它的源模块。
当然,在实践中我知道DWORD
只是unsigned int
,但如果可能的话,我更喜欢包含官方头文件的更卫生的方法。
关于 this page它说DWORD
在 windef.h
中定义, 但不幸的是,只包含这个小文件会直接导致编译错误——显然它希望被其他头文件包含。 (此外,我的文件是头文件这一事实也意味着我不能只声明 WIN32_LEAN_AND_MEAN
,因为 #includes 我的文件的源文件可能需要将其保留为未定义。)
有什么想法吗?我知道这不是世界末日——我可以继续 #include <windows.h>
-- 但认为有人可能有更好的主意!
[编辑] 感谢您的回复。对于那些建议使用不同类型的人,让我解释一下为什么在这种情况下不希望这样做:我在不同的源文件中为这两个函数设置了不同的、特定于平台的版本,并要求 CMake 配置检测当前平台并选择 build 哪一个。在 Windows 上,我的函数如下所示:
typedef DWORD TimePoint;
TimePoint GetTimeNow(void);
double TimeDifference(TimePoint start, TimePoint end);
Windows 版本GetTimeNow()
只需调用 Windows API timeGetTime()
,返回类型为 DWORD
,因此它必须具有相同的返回类型。 (在其他平台上,TimePoint
将具有不同的类型,例如 UNIXy 平台上的 struct timeval
。)实际上,TimePoint
类型的值是不透明的,你唯一能做的就是将其中两个传递给 TimeDifference()
以秒为单位测量它们之间耗时。这使得跨平台开发成为可能。不幸的是,这仍然意味着客户端代码必须知道 TimePoint
的具体类型。 .
最佳答案
包含 Windows.h 并使用预编译 header 。顺便说一句,您可以先定义 WIN32_LEAN_AND_MEAN,然后再取消定义!
关于c - 我可以 #include 定义 DWORD 的最小 Windows header 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2473334/