Как определить, что список va _пуст

Я читал, что некоторые компиляторы поддерживают список 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 )

Я думал о том, чтобы, возможно, включить терминатор , но я хотел бы, чтобы он был скрыт от вызывающей стороны, чтобы существующий код не нужно было изменять.

7
задан Community 23 May 2017 в 12:08
поделиться