VC ++ допускает / ## / в качестве значения макроса - как с этим обращаться в eclipse / mingw-gcc? - PullRequest
6 голосов
/ 06 февраля 2012

Я пытаюсь скомпилировать настоящее приложение win32 в eclipse / mingw-gcc, но безуспешно до сих пор (см. https://stackoverflow.com/questions/9162976/how-to-compile-a-win32-application-in-eclipse-using-the-mingw-gcc-toolchain)

В любом случае, при устранении еще одной ошибки следующая строка в файле c: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Include \ WTypes.h заинтересовала меня :

#define _VARIANT_BOOL    /##/

Используется в struct tagVARIANT из C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Include \ OAIdl.h :

VARIANT_BOOL boolVal;
_VARIANT_BOOL bool;
SCODE scode;

, который расширяется до:

VARIANT_BOOL boolVal;

SCODE scode;

Потому что /##/ расширен до //, который начинает комментарий! Я не верю, что он соответствует стандарту, и на самом деле попытка скомпилировать в 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

Итак, я ищу советы, как решить эту проблему.

1 Ответ

0 голосов
/ 07 февраля 2012

Вам необходимо выяснить, при каких условиях макрос имеет определение проблемы, и отменить его в этом случае. Если нет возможности сказать, просто отмените это безоговорочно, и надеюсь, что все в порядке. (

#include <problem-header.h>

#if whatever condition makes sense
#undef _VARIANT_BOOL
#endif

.....

#ifdef _VARIANT_BOOL
_VARIANT_BOOL bool;
#endif
...