最近我找到了带有三个点参数的函数原型。我编写了自己的函数并编译得很好:
void func(int a, ...){}
这是什么意思?
更新
谢谢你们!我想到了。这是我的例子:
void func(unsigned int n_args, int arg, ...)
{
for(unsigned int i = 0; i < n_args; ++i)
cout << *((int*)&arg + i) << ' ';
}
此函数打印出以空格字符分隔的参数。
答案 0 :(得分:5)
具有三个点的函数意味着您可以传递可变数量的参数。由于被调用函数并不真正知道传递了多少个参数,因此通常需要一些方法来告诉它。因此,您需要一些额外的参数来确定参数。
一个很好的例子是printf
。您可以传递任意数量的参数,第一个参数是一个字符串,它描述了传入的额外参数。
void func(int count, ...)
{
va_list args;
int i;
int sum = 0;
va_start(args, count);
for(i = 0; i < count; i++)
sum += va_arg(args, int);
va_end(ap);
printf("%d\n", sum);
}
<强>更新强>
要解决您的评论,您不需要参数的名称。这就是它的全部要点,因为你不知道在编译时你会传递哪些参数和多少参数。这取决于当然的功能。在上面的例子中,我假设只传递了int
个。如您所知printf
,您传递任何类型,您必须解释它们。这就是为什么你需要一个格式说明符来告诉函数传递什么类型的参数的原因。或者如我的示例中所示,您当然可以假设特定类型并使用它。