c++ - 为什么 MinGW 会自动包含 <windef.h>

标签 c++ windows mingw

我正在尝试以平台不可知的方式对 DWORD 进行类型定义,但我遇到了以下编译器错误:

...\mingw.org\mingw_gcc_4.5.0\bin\../lib/gcc/mingw32/4.5.0/../../
../../include/windef.h:229:23: error: 
'DWORD' has a previous declaration as 'typedef long unsigned int DWORD'

我希望能够依赖于我对 DWORD 的实现,而不是依赖于知道它是什么的底层编译器(使用 typedef,而不是宏)。

为什么 mingw (gcc 4.5.0) 在编译应用程序时会自动包含“windef.h”?

如何防止这种包含?

最佳答案

我的 MinGW 似乎没有自动引入 windef.h。我怀疑您的程序包含其他一些间接将其引入的 header 。您可以发布一个显示问题的简短程序吗?

请注意,我看到您正在使用是否定义了 _WINDEF_H 来确定这些内容是否已经过类型定义。这在使用 MinGW 时可能有效,但实际的 Windows SDK 在包含 windef.h 时定义了 _WINDEF_ - 至少是一个特定版本。我想这是相当稳定的,但肯定有可能在某个时候发生了变化。

最好键入诸如宏 MAKEWORD 之类的内容来检测是否已包含 windef.h - MAKEWORD 已记录作为在 windef.h 中定义的宏,因此它在 SDK 版本中应该是稳定的,无论是否来自 Microsoft。

关于c++ - 为什么 MinGW 会自动包含 <windef.h>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517161/

相关文章:

c - Windows C 对话框大小调整器

c++ - 链接错误 : Boost Library on Windows using MinGW

boost - 使用大小优化(-Os)编译boost_regex时出现 'duplicate section'错误

c++ - 链接到G++中的复数库

C++ header 保护

c++ - 从文本文件读取以显示给多个联系人

c - C 中的 Windows 用户主文件夹 (MinGW)

c++ - 使用自定义模型从 QTreeView 中删除行

windows - Git 配置别名不再起作用

c - 如何使用命令提示符/C合并两个EXE文件