C言語標準ライブラリの概要[7]-変長パラメータ


ヘッダファイルh>の説明は、未知数とタイプを含む関数変数テーブルを順次処理するメカニズムを提供する.
7.1 va_start
7.2 va_arg
7.3 va_end
void va_start(va_list ap, lastarg); 
type va_arg(va_list ap, type); 
void va_end(va_list ap);

関数fに可変数の変数が含まれていると仮定し、lastargはその最後の有名なパラメータであり、f内でva_のタイプを説明する.listの変数apは、各変数を順次指します.
va_list ap;

名前のない変数にアクセスする前にva_を使用する必要があります.startマクロはapを初期化します.
va_start(ap, lastarg);

その後、マクロva_argの実行ごとに、次の名前のない変数と同じタイプと値の値が生成されます.apも変更して、次のva_を使用します.argでは次の変数を返します.
va_arg(ap, type);

すべての変数の処理が完了すると、fが戻る前にマクロvaを呼び出す必要があります.end:
va_end(ap);

例:関数sum_series()の最初のパラメータは変数アイテム数です.
double sum_series(int num, … ) 
{ 
	double sum = 0.0, t; 
	va_list ap;
	va_start(ap, num);
	 for (; num; num--) {
		 t = va_arg(ap, double); 
		 sum += t;
	 } 
	va_end(ap);
	return sum;
 }