使用顯式計數引數來確定 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;
}