可変引数

printfのように、呼び出し側で引数の数や型を決めるような関数を作ることができる・・・。
引数が呼び出し側で可変なので可変引数という・・・。

可変引数を扱うには、stdarg.hというヘッダファイルをインクルードする必要がある・・・。

例えば、今回は指定された引数を足し合わせて総和を求める関数sumを定義する・・・。
第1引数は、第2引数以降の個数で、第2引数以降に足し合わせる値を入れていく・・・。
第2引数以降は"..."と書くことで、指定する引数の個数が可変になる・・・。

sumの定義だが、va_startで可変引数情報をargsに渡す・・・。
で、ここから可変引数の値を取り出せるので、va_argでint型の値として可変引数を一つずつ取り出して、今回は総和なのでそれらを足していく・・・。
終わったらva_endを呼び、総和のxを返す・・・。

main関数では、このように1から3までの和と1から5までの和を求めるためにsumを呼び出し・・・。
確かに引数の数が違うが、どちらも対応できてる・・・。

実行すると、

$ vi variable_argument.c
$ gcc variable_argument.c -o variable_argument
$ ./variable_argument
result3 = 6
result5 = 15
$

1から3までの和、1から5までの和、どちらも計算できている・・・。

Sample/variable_argument.c at master · bg1bgst333/Sample · GitHub