可変長引数関数 c言語

printfのように引数の数を使うときによって可変にできるような関数を作ります。今回はもっとも基本的な使い方。

宣言

void func(int num, ...);

このように “,”の後に … とすると可変長引数を使うことができます。 ここでは num は引数の数を想定しています。 後述しますが、可変長引数リストの通常の使い方では引数の数を判断することができず、正しく動作が行われなくなるため、引数として故意に引数の数を与えています。また、この使い方では可変長引数リストのみの関数宣言はできません。

引数の取り出しから終了まで


void func(int num, ...){ //!可変長引数リストを宣言 va_list args; va_start(args, num);//num以降の引数をリスト(args)に格納 ※ここでの指定が必要なため可変長引数リストのみの宣言ができない。 //!カウンタ int i; for (i = 0; i < num; i++){//num で与えた引数の数だけ与えられた文字列の出力を行う。 printf("%s\n",va_arg(args, char *)); } va_end(args);//可変長引数終了宣言 }

使用した結果

int main(int argc, char *argv[]){
    func(3, "aaa", "bbb", "ccc");
}

aaa
bbb
ccc