Is there any way to compute length of va_list? All examples I saw the number of variable parameters is given explicitly.
There is no way to compute the length of a va_list, this is why you need the format string in printf like functions.
The only functions macros available for working with a va_list are:
va_start - start using the va_listva_arg - get next argument va_end - stop using the va_listva_copy (since C++11 and C99) - copy the va_listPlease note that you need to call va_start and va_end in the same scope which means you can't wrap it in a utility class which calls va_start in its constructor and va_end in its destructor (I was bitten by this once).
For example this class is worthless:
class arg_list {
va_list vl;
public:
arg_list(const int& n) { va_start(vl, n); }
~arg_list() { va_end(vl); }
int arg() {
return static_cast(va_arg(vl, int);
}
};
GCC outputs the following error
t.cpp: In constructor
arg_list::arg_list(const int&):
Line 7: error:va_startused in function with fixed args
compilation terminated due to -Wfatal-errors.