C言語標準ライブラリの概要[7]-変長パラメータ
ヘッダファイルh>の説明は、未知数とタイプを含む関数変数テーブルを順次処理するメカニズムを提供する.
7.1 va_start
7.2 va_arg
7.3 va_end
関数fに可変数の変数が含まれていると仮定し、lastargはその最後の有名なパラメータであり、f内でva_のタイプを説明する.listの変数apは、各変数を順次指します.
名前のない変数にアクセスする前にva_を使用する必要があります.startマクロはapを初期化します.
その後、マクロva_argの実行ごとに、次の名前のない変数と同じタイプと値の値が生成されます.apも変更して、次のva_を使用します.argでは次の変数を返します.
すべての変数の処理が完了すると、fが戻る前にマクロvaを呼び出す必要があります.end:
例:関数sum_series()の最初のパラメータは変数アイテム数です.
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;
}