在 C++ 中,为什么 va_start 紧接着 va_end?
In C++ why have va_start immediately followed by va_end?
我在尝试阅读和理解的项目中的几个函数中看到以下代码:
void Algo::descend(const enc_node* node, const char* option, ...)
{
...
va_list va;
va_start(va, option);
va_end(va);
...
}
我原则上理解可变参数函数,但为什么有人会创建一个可变参数函数,然后调用 va_start()
,然后立即调用 va_end()
,中间什么都没有?这有什么作用?
In C++ why have va_start immediately followed by va_end?
不知道。
why would someone make a variadic function and then call va_start() followed immediately by va_end() with nothing in between?
不知道,这没有多大意义。这就像写 int a;
而从不使用该变量。 (可能是程序员头脑中咖啡不够的标志。)
What does this achieve?
没有。
您发布 link 以提供更多见解的完整功能:
void Algo::descend(const enc_node* node, const char* option, ...)
{
if (logdebug_enabled(LogEncoder)) {
descendLevel++;
printf("%d ",descendLevel);
for (int i=0;i<descendLevel;i++) { printf(" "); }
va_list va;
va_start(va, option);
va_end(va);
fprintf(stdout, ">%s(", name());
vfprintf(stdout, option, va);
fprintf(stdout, ") %d;%d %dx%d %p\n",node->x,node->y,1<<node->log2Size,1<<node->log2Size,node);
}
}
该函数与 the link you mentioned 中的所有其他此类函数一样无效。在 va_end
之后调用 vfprintf
并使用 va
是未定义的行为。如果它是一个开放项目 - 帮助社区并通知开发人员。
我在尝试阅读和理解的项目中的几个函数中看到以下代码:
void Algo::descend(const enc_node* node, const char* option, ...)
{
...
va_list va;
va_start(va, option);
va_end(va);
...
}
我原则上理解可变参数函数,但为什么有人会创建一个可变参数函数,然后调用 va_start()
,然后立即调用 va_end()
,中间什么都没有?这有什么作用?
In C++ why have va_start immediately followed by va_end?
不知道。
why would someone make a variadic function and then call va_start() followed immediately by va_end() with nothing in between?
不知道,这没有多大意义。这就像写 int a;
而从不使用该变量。 (可能是程序员头脑中咖啡不够的标志。)
What does this achieve?
没有。
您发布 link 以提供更多见解的完整功能:
void Algo::descend(const enc_node* node, const char* option, ...)
{
if (logdebug_enabled(LogEncoder)) {
descendLevel++;
printf("%d ",descendLevel);
for (int i=0;i<descendLevel;i++) { printf(" "); }
va_list va;
va_start(va, option);
va_end(va);
fprintf(stdout, ">%s(", name());
vfprintf(stdout, option, va);
fprintf(stdout, ") %d;%d %dx%d %p\n",node->x,node->y,1<<node->log2Size,1<<node->log2Size,node);
}
}
该函数与 the link you mentioned 中的所有其他此类函数一样无效。在 va_end
之后调用 vfprintf
并使用 va
是未定义的行为。如果它是一个开放项目 - 帮助社区并通知开发人员。