3
我运行cl/P test.cpp,文件和结果如下。Visual studio __VA_ARGS__问题
TEST.CPP
#define FiltedLog(...) \
if (logDetail) \
MP_LOG(LOG_INFO, __VA_ARGS__);
#define MP_LOG(level,fmt,...) \
BOOAT::LOG("MP", level, fmt, ##__VA_ARGS__)
#define LOG(tag,level,fmt,...) \
Log::log(tag, level, "%s: " fmt, __PRETTY_FUNCTION__, ##__VA_ARGS__)
int main()
{
FiltedLog ("abc", 1, 2);
}
氯/ P TEST.CPP:
但不知为何,__PRETTY_FUNCTION__
被放置在结果的最后一个参数。 我假设结果应该是:
if (logDetail) BOOAT::Log::log("MP", LOG_INFO, "%s: " "abc", __PRETTY_FUNCTION__, 1, 2);;
这是VS 2010的错误吗?
你可以给这个漏洞的更多信息?例如,这个错误会发生。以及为什么这种解决方法有效。 – ZijingWu
请参阅http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement –