count 参数是否应该直接在可变参数函数中的省略号 (..) 之前声明

Should the count parameter be declared directly before the ellipsis (...) in a variadic function?

本文关键字:参数 省略号 声明 函数 变参 是否 count      更新时间:2023-10-16

这是va_start宏的实现:

#define va_start(list, param) (list = (((va_list)&param) + sizeof(param)))

如您所见,va_start 宏通过假设参数变量直接存在于 count 参数之后来返回参数变量列表中第一个字节的地址(我的意思是 count 参数我声明的参数名称我将传递给参数的数量)。

因此,如果我除了使用count参数之外还使用其他参数,是否应该直接在省略号(...)之前声明count参数?

va_start()

始终使用最后一个命名参数调用,例如

void function(int x, int y, int z, ...)
{
    va_list ap;
    va_start(ap, z);
    .
    .
    .
    va_end(ap);
}

因此,如果我除了使用计数参数之外还使用其他参数,是否应该直接在省略号 (...) 之前声明 count 参数?

是的,如果您想以这种方式使用va_start()

va_list ap;
va_start(ap, count);