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 theva_listva_arg– get the next argumentva_end– stop using theva_listva_copy(since C++11 and C99) – copy theva_list
Please note that you need to call va_start and va_end in the same scope which means you cannot 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<int>(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.