0

我一直在努力让我最初在 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 让我失望了……

谢谢。

4

1 回答 1

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)
于 2010-03-01T05:52:20.023 回答