c++ - 调用 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;
}
解决方案
是的,这是合法的。不,函数不需要调用va_start
。来自 C99 标准:
如果需要访问不同的参数,被调用的函数应声明一个对象......具有类型 va_list。
这里注意两点:
- A
va_list
是va_start
调用的先决条件。 - 只有在需要访问不同的参数
va_list
时才需要拥有A。
因此,只有在需要访问不同的参数va_start
时才需要调用。
推荐阅读
- javascript - 基于 ES6 类的继承是否与 es5 原型继承相同
- docker - Kafka 无法与 Linux 机器中的 Zookeeper 连接
- javascript - 使用一个数组中的值作为键从另一个数组中查找匹配项
- c++ - 如何在二维数组 (C++) 中检查我周围的单元格的邻居?
- javascript - 如何在 asp.net MVC 视图中解析 ContentResult.Content 类型的对象?
- python - 如何根据条件连接同一列的值?
- html - Angular Kendo 网格视图和列表视图和详细信息视图
- ios - 使用通用命令重复功能(不提及功能名称)
- angular - Angular 7.2.3,通过“文件”发送帖子数据。(在 Express 中通过“req.files”重新收集该数据)
- azure - ApplicationInsights:如何查询包含错误的 azure 函数执行的完整跟踪?