首页 > 解决方案 > 调用 va_start 是否需要具有可变参数的函数?

问题描述

在开始使用之前尽早退出带有可变参数的函数是否安全va_list

#include <cstdarg>

int func(const char * format, ...){
    if(format == NULL)
        return 0; // <-- exits before acknowledging variadic parameters; is this okay?
    va_list params;
    va_start(params, format);

    // func body

    va_end(params);
    return stuff;
}

标签: c++variadic-functions

解决方案


的,这是合法的。,函数不需要调用va_start。来自 C99 标准:

如果需要访问不同的参数,被调用的函数应声明一个对象......具有类型 va_list。

这里注意两点:

  1. Ava_listva_start调用的先决条件。
  2. 只有在需要访问不同的参数va_list时才需要拥有A。

因此,只有在需要访问不同的参数va_start时才需要调用。


推荐阅读