【发布时间】:2021-02-02 23:12:48
【问题描述】:
在函数开始使用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和va_end之间返回会调用未定义的行为。在va_start之前或va_end之后返回都可以。 -
考虑改用参数包。它是一种现代类型安全的替代方案。 Parameter pack