【发布时间】:2010-03-01 05:27:26
【问题描述】:
我一直在努力让我最初在 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 让我失望了......
谢谢。
【问题讨论】:
-
我确认它成功地构建并使用 VS2005 “按原样”运行,即使使用
/W1。我只能说确保SH_ASSERT没有(重新)在其他地方定义为非可变参数(我怀疑你改变了它)。您可能不能只禁用警告,因为预处理器会丢弃它认为多余的东西。 -
宏没有被重新定义,我仔细检查了那个。它必须是特定于 2005 -> 2008 差异的东西
标签: c++ visual-studio visual-studio-2008 macros variadic-functions