我正在尝试以与平台无关的方式 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/