使用顯式計數引數來確定 va 列表的長度
對於任何可變引數函式,該函式必須知道如何解釋變數引數列表。使用 printf()
或 scanf()
函式,格式字串告訴函式期望什麼。
最簡單的技術是傳遞其他引數的顯式計數(通常是所有相同的型別)。這在下面的程式碼中的可變引數函式中得到證明,該函式計算一系列整數的總和,其中可以有任意數量的整數,但該計數被指定為變數引數列表之前的引數。
#include <stdio.h>
#include <stdarg.h>
/* first arg is the number of following int args to sum. */
int sum(int n, ...) {
int sum = 0;
va_list it; /* hold information about the variadic argument list. */
va_start(it, n); /* start variadic argument processing */
while (n--)
sum += va_arg(it, int); /* get and sum the next variadic argument */
va_end(it); /* end variadic argument processing */
return sum;
}
int main(void)
{
printf("%d\n", sum(5, 1, 2, 3, 4, 5)); /* prints 15 */
printf("%d\n", sum(10, 5, 9, 2, 5, 111, 6666, 42, 1, 43, -6218)); /* prints 666 */
return 0;
}