VC++允许/ ## /作为宏的值 - 如何在eclipse/mingw-gcc中处理它?

mar*_*ark 6 c++ winapi gcc mingw

我试图在eclipse/mingw-gcc中编译一个真正的win32应用程序,直到现在还没有成功(参见/sf/ask/641408351/ using-the-mingw-gcc-toolchain)

无论如何,在排除另一个错误时,文件c:\ Program Files(x86)\ Microsoft SDKs\Windows\v7.0A\Include\WTypes.h中的以下行引起了我的好奇心:

#define _VARIANT_BOOL    /##/
Run Code Online (Sandbox Code Playgroud)

它在内部使用struct tagVARIANTC:\ Program Files文件(x86)的\微软的SDK \的Windows\v7.0A \包含\ OAIDL.H:

VARIANT_BOOL boolVal;
_VARIANT_BOOL bool;
SCODE scode;
Run Code Online (Sandbox Code Playgroud)

扩展到:

VARIANT_BOOL boolVal;

SCODE scode;
Run Code Online (Sandbox Code Playgroud)

因为/##/扩大了//,开始评论!我不相信它符合标准,并且确实尝试在mingw-gcc中编译失败:

pasting "/" and "/" does not give a valid preprocessing token   ComHelpers      line 445, external location: o:\C\wsdk\Include\oaidl.h  C/C++ Problem
Run Code Online (Sandbox Code Playgroud)

所以,我正在寻找有关如何解决这个问题的建议.

ams*_*ams 0

您需要弄清楚宏在什么条件下具有问题定义,并在这种情况下取​​消定义它。如果没有办法判断,那就无条件取消定义它,希望没问题。:(

#include <problem-header.h>

#if whatever condition makes sense
#undef _VARIANT_BOOL
#endif

.....

#ifdef _VARIANT_BOOL
_VARIANT_BOOL bool;
#endif
Run Code Online (Sandbox Code Playgroud)