length of va_list when using variable list arguments?

后端 未结 6 455
花落未央
花落未央 2020-12-14 15:23

Is there any way to compute length of va_list? All examples I saw the number of variable parameters is given explicitly.

6条回答
  •  我在风中等你
    2020-12-14 15:48

    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 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 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_start used in function with fixed args
    compilation terminated due to -Wfatal-errors.

提交回复
热议问题