问题描述
在开始使用 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;
}
解决方法
是的,这是合法的。 否,函数不需要调用 va_start
。来自 C99 标准:
如果需要访问不同的参数,被调用的函数 应声明一个对象...类型为 va_list。
请注意这里的两件事:
-
va_list
是va_start
调用的先决条件。 - 只有在如果需要访问不同参数时才需要
va_list
。
因此,只有需要访问不同的参数时,才需要调用 va_start
。