需求:函數接受任意數量整數,以負數結尾,返回最大值。利用 <stdarg.h> 標準宏實現。
va_list ap:參數列表指針。va_start(ap, last_fixed):初始化,last_fixed 為最後一個固定參數(此處為計數佔位符)。va_arg(ap, type):按類型取出下一個參數,移動指針。va_end(ap):清理。#include <stdio.h>
#include <stdarg.h>
int max_list(int n, ...) { // n 為佔位,實際由負數終止
va_list ap;
va_start(ap, n);
int max = 0, current;
while ((current = va_arg(ap, int)) >= 0) {
if (current > max) max = current;
}
va_end(ap);
return max;
}
int main() {
printf("%d\n", max_list(10, 23, 89, 56, 83, 91, 100, -1)); // 輸出 100
return 0;
}
n 此處未使用,僅滿足 va_start 要求「最後一個固定參數」。stdarg.h 讓 C 擁有類型安全的可變參數能力,是 printf/scanf 族函數的基石。