可変長引数
printfとかで使われてるあれ。
「...」ってかわいいですね。
#include <stdio.h> #include <stdarg.h> void print_args(int nnum, ...); int main() { print_args(5, 1, 2, 3, 4, 5); return 0; } void print_args(int nnum, ...) { int i = 0, tmp; va_list arg; va_start(arg, nnum); for (i = 0; i < nnum; ++i) { printf("%d\n", va_arg(arg, int)); } va_end(arg); }
va_startの第二引数には、可変長になる直前の最後のパラメータをわたす。多分、どこからが可変長引数への引数なのか知りたいんじゃろう。
最低1つの固定引数が必要らしい。したがって以下のような書き方はできない。
void print_args(...);
それと、フォーマットもちゃんと判定してあげないとね。(上ではさぼりまくりでintしか見てないけど)
ああ、ちなみに今更PHPの話するのもなんだけど、PHPなら楽だよね。
<?php // stdargs.php function print_avg() { echo array_sum(func_get_args())/count(func_get_args()); } print_avg(1, 2, 3, 4, 5); // 3.5
JavaScriptでも楽。
function average() { var sum = 0; for (var i = 0; i < arguments.length; ++i) { sum += arguments[i]; } return sum/arguments.length; } console.info(average(1, 2, 3, 4, 5));
つうかLLではこんなの楽じゃなくてどうするって話か。