Я читал, что некоторые компиляторы поддерживают список va _с макросами, и пользователи могли перегружать функциональность другими макросами для подсчета списка va _.
В Visual Studio есть ли способ определить, пуст ли список va _(, он же 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 только устанавливает для параметра значение null.
#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 )
Я думал о том, чтобы, возможно, включить терминатор , но я хотел бы, чтобы он был скрыт от вызывающей стороны, чтобы существующий код не нужно было изменять.