为什么MinGW会自动包含<windef.h> </windef.h>

时间:2011-04-01 18:12:11

标签: c++ windows mingw

我试图以平台无关的方式输入defde 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”?

如何阻止这种包含?

2 个答案:

答案 0 :(得分:4)

解决了它,

它包含在windows.h中,由boost头文件包含。

我定义这些typedef的头文件只是查找“_WINDEF_H”的存在 - 并且有一个规则,它必须是最后包含的头文件(为了给windows头文件包含足够的时间,从而否定了需要我的typedef)。

答案 1 :(得分:4)

我的MinGW似乎没有自动拉入windef.h。我怀疑你的程序包含了一些间接拉入它的其他标题。你能发布一个显示问题的短程序吗?

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

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