Variadic Macros: как решить "слишком много фактических параметров для макроса .." - PullRequest
0 голосов
/ 01 марта 2010

Я работал над тем, чтобы часть моего кода, изначально построенного на Mac, работала под Visual Studio 2008 Express, и столкнулся со странной проблемой с переменными макросами, которые я использую для своего кода подтверждения:

Макрос определяется как:

#define SH_ASSERT( assertID, exp, description, ... ) shAssertBasic( int(exp), assertID, description, __LINE__, __FILE__ , ##__VA_ARGS__ ) 

Все это прекрасно работает под gcc (под osx) и используется для запуска под VS 2005, однако с 2008 года я получаю следующее предупреждение:

 warning C4002: too many actual parameters for macro 'SH_ASSERT'

Код вызова просто:

SH_ASSERT(0, donkeys != aliens , "Donkeys are Aliens Code : Code %d condition %d" , 55, 666);

Я уверен, что мне не хватает чего-то простого, и мой Google Foo подводит меня ...

Спасибо.

1 Ответ

1 голос
/ 01 марта 2010

Измените порядок аргументов (поместите описание с ... частью), чтобы сделать что-то вроде этого:

#define SH_ASSERT( assertID, exp, ... ) shAssertBasic( int(exp), assertID, __LINE__, __FILE__, __VA_ARGS__ )

Это должно сработать, у вас также есть возможность подавить предупреждение в Windows:

#pragma warning (push)
#pragma warning( disable:code/number )
#pragma warning (pop)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...