Variadic宏:如何解决“宏的实际参数太多......”

时间:2010-03-01 05:27:27

标签: c++ visual-studio visual-studio-2008 macros variadic-functions

我一直在努力获取最初在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);

我确信我错过了一些简单的东西,而我的谷歌foo让我失望......

感谢。

1 个答案:

答案 0 :(得分:1)

更改参数顺序(将描述与......部分一起)来执行以下操作:

#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)