(2005-11の一覧)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2005-11-04 Fri (他の年の同じ日: 2011)

今日の戦利品
2005-11-04-3 / カテゴリ: [diary][ぬいぐるみ] / [permlink]

キティ・プーさんリラックマ

寝付けずに前の夜から寝てなかったので定時にサッサと帰った…が、寄り道(笑)

可変長引数
2005-11-04-2 / カテゴリ: [programming][c] / [permlink]

めも

各変数を自前で取り出して使う場合
#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 を渡せば期待する動作になるかと.

printfのフォーマットで桁数を変数指定
2005-11-04-1 / カテゴリ: [programming][perl][c] / [permlink]

 * を使う

printf("%*d", width, val);
で,width で桁数を指定できる.
width を負の数にすれば,左寄せも可.

Perl でもまったくおんなじ
printf("%0*d\n", $width, $val);
こっちはゼロ詰指定
前の日 / 次の日 / 最新 / 2005-11

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