我在一个试图阅读和理解的项目中的几个函数中看到了以下代码:
void Algo::descend(const enc_node* node, const char* option, ...)
{
...
va_list va;
va_start(va, option);
va_end(va);
...
}
原则上我理解变差函数,但为什么有人会做一个变差函数然后调用va_start()
,然后紧接着调用va_end()
,中间什么都没有?这能实现什么?
在C++中,为什么va_start后面紧跟着va_end?
不知道。
为什么有人会制作一个可变函数,然后调用va_start((,然后紧接着调用va_end((,中间什么都没有?
不知道,这没有多大意义。这就像编写int a;
,却从不使用那个变量。(可能是程序员脑子里没有足够咖啡的迹象。(
这实现了什么?
什么都没有。
您发布链接的完整功能提供了更多见解:
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 %pn",node->x,node->y,1<<node->log2Size,1<<node->log2Size,node);
}
}
该函数与您提到的链接中的所有其他此类函数一样无效。调用vfprintf
并在va_end
之后使用va
是未定义的行为。如果是开放项目,请帮助社区并通知开发人员。