根据C - Variable Arguments中的解释所写的内容:
定义一个函数,其最后一个参数为省略号,而省略号之前的那个函数总是一个int ,它将代表参数的数量。
在...
之前将int发送到椭圆函数真的是必须的吗?
我看到了printf()
函数的原型,在...
之前函数得到const char *
并且int
之前没有任何...
。
答案 0 :(得分:3)
不,传递int
不是一项要求,正如printf()
所证明的那样。您在本教程中看到的内容特定于本教程提供的func()
和average()
示例(尽管func()
示例与int
说明无法正确匹配,但{ {1}}例子确实如此)。
只有调用者知道它传入了多少参数值(以及它们的类型),因此您需要设计可变参数函数,使调用者必须指定实际存在多少参数值传入(以及可选的类型)。有两种方法可以做到这一点:
传入必需的前导参数。这可以是average()
,指定确切的参数计数。或者它可以是函数解析以确定参数的字符串(这是int
所做的)。
传入所需的哨兵值作为最后一个参数值。然后该函数只使用它找到的所有参数,直到它到达那个哨兵。