0

もともとMacでビルドされたコードの一部をVisualStudio2008 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は私を失敗させています...

ありがとう。

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 に答える