c - 我可以 #include 定义 DWORD 的最小 Windows header 是什么?

标签 c windows header

我有一个自己的小头文件,它声明了几个函数,其中一个函数的返回类型为 DWORD .懒得拖了windows.h只是为了获得这种类型的官方定义,因为该文件很大,而且我的 header 将用于许多不需要它的源模块。

当然,在实践中我知道DWORD只是unsigned int ,但如果可能的话,我更喜欢包含官方头文件的更卫生的方法。

关于 this page它说DWORDwindef.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/

相关文章:

c - 如何在 pcap_loop 的回调函数中注入(inject)数据包?

windows - 如何从两个(双引导)操作系统运行相同的 eclipse 安装?

php - 401 重定向神奇地导致 302 重定向

html - 在不破坏布局的情况下,无法让我的页眉与页面顶部齐平

css - 标题位置固定在 Rdash Angular 中的页面滚动上

符合标准的字符串是否可以超过 SIZE_MAX 个字符?

c++ - 从午夜开始计算毫秒数

c - 矩阵乘法 C

java - Hadoop名称节点格式化窗口-java.lang.UnsupportedOperationException

windows - Windows 中的 socket 和 HANDLE 有什么区别?