【发布时间】:2012-07-25 15:22:47
【问题描述】:
我一直在阅读一些编译器支持带有宏的 va_list 并且用户能够overload the functionality with other macros in order to count the va_list。
使用 Visual Studio,有没有办法确定 va_list 是否为空(又名 count==0)?基本上我想知道这种情况:
extern void Foo(const char* psz, ...);
void Test()
{
Foo("My String"); // No params were passed
}
我最初的想法是做这样的事情:
va_list vaStart;
va_list vaEnd;
va_start(vaStart, psz);
va_end(vaEnd);
if (vaStart == vaEnd) ...
问题在于 va_end 仅将参数设置为空。
#define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
#define _crt_va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _crt_va_end(ap) ( ap = (va_list)0 )
我在考虑可能合并一个terminator,但我希望它对调用者隐藏,这样就不需要更改现有代码。
【问题讨论】:
标签: c++ visual-studio-2010 visual-c++ variadic-functions