length of va_list when using variable list arguments?

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_list
  • va_arg – get the next argument
  • va_end – stop using the va_list
  • va_copy (since C++11 and C99) – copy the va_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_start used in function with fixed args
compilation terminated due to -Wfatal-errors.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)