C++ 调用va_start是否需要具有可变参数的函数?
在开始使用变量列表之前,提前退出带有可变参数的函数是否安全C++ 调用va_start是否需要具有可变参数的函数?,c++,variadic-functions,C++,Variadic Functions,在开始使用变量列表之前,提前退出带有可变参数的函数是否安全 #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, form
#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;
}
#包括
int func(常量字符*格式,…){
if(格式==NULL)
返回0;//是,这是合法的。否,函数不需要调用va_start
。从C99标准:
如果需要访问可变参数,则调用的函数
应声明一个对象…具有类型va_列表
注意这里的两件事:
va_列表
是调用va_启动
的先决条件
只有在需要访问各种参数时,才需要使用va_列表
同样,只有在需要访问不同参数时,va_start
调用才是必要的。就我所知,不要认为有任何理由阻止您在<代码> VAXSTATE/<代码>和<代码> VAYEXED>代码>之间返回未定义的行为。在“代码> VAYSTART 之前或在代码> VAXEDATE//C>之后返回。请考虑使用参数包。它是一种现代类型安全的替代品。