Another introduction to programming language C 0E: コマンドライン引数

C言語入門も,そろそろ終盤である.

締めくくりのお題として,コマンドライン引数の処理について解説する.コマンドライン引数とは

$ ./program parameter another_parameter yet_another_parameter

という風に,起動時にコマンドラインで与える引数である.この引数はmain関数に渡されるのだが,その渡されかたが少しばかりユニークである.

これまで何度も見てきたとおり,main関数は次のような引数を取る.

int main(int argc, char *argv[]) {
  ...
  return 0;
}

main関数はint型引数1個と,charポインタの配列を引数として受け取る.上述のコマンドライン引数が与えられた場合,次の意味になる.

argc = 4;
argv[0] = "./program";
argv[1] = "parameter";
argv[2] = "another_parameter";
argv[3] = "yet_another_parameter";
argv[4] = 0;

argcとargvによる二重管理は,あまり快適なものではない.うまい処理方法は,次のような慣用句を使うことである.

void do_something(const char *parameter) {
  printf("processing %s...", parameter);
  ...
  printf("done\n");
}
int main(int argc, char *argv[]) {
  while (--argc > 0) {
    argv += 1;
    do_something(*argv);
  }
  return 0;
}

--argcは argc -= 1 を縮めて書いたものである.代入と比較をwhile文の条件式で一気に行いたかったので,主義に反して単項--演算子を使っている.
Comments