我正在尝试以与平台无关的方式 typedef 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 。我怀疑您的程序包含其他一些间接拉入它的标题。您可以发布一个显示问题的简短程序吗?

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

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

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

10-11 15:25