次のエントリ: 今日の戦利品 [ぬいぐるみ]
可変長引数
2005-11-04-2 / カテゴリ: [programming][c] / [permlink]
めも
各変数を自前で取り出して使う場合
また,型情報が必要なので,複数の型を扱うときは工夫が必要.
printf(3) 関係のラッパ
各変数を自前で取り出して使う場合
#include <stdarg.h> /* 引数を全部足して返す */ int sumall(int n, ...) { va_list ap; int total = n; int n_tmp = 0; va_start(ap, n); /* 最後の固定変数を指定し,最初の可変長引数をセットする */ while ((n_tmp = va_arg(ap, int)) != 0) { total += n_tmp; /* 型を指定することで引数を一つ取り出す. ap には次の引数がセット */ } va_end(ap); /* 後始末 */ return total; }というわけで,va_xxx には「引数の最後」が何かを知る術はないようなので,固定引数部分に引数の個数を入れるか,番兵を使うかするっぽい.(上のコードは 0 があったら終了する)
また,型情報が必要なので,複数の型を扱うときは工夫が必要.
printf(3) 関係のラッパ
#include <stdarg.h> void error(char *fmt, ...) { va_list ap; fprintf(stderr, "%s", "Error! "); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); exit(1); }vprintf(3) や vfprintf(3) には,ap を渡せば期待する動作になるかと.
次のエントリ: 今日の戦利品 [ぬいぐるみ]
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2013-05-02 16:12