我正在尝试以平台不可知的方式对 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/