我一直在努力获取最初在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让我失望......
感谢。
答案 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)