本物のC

C の知識:コマンドライン引数


コマンドライン引数とは gcc へソースファイルを指定する時の様に、コマンドラインでプログラムの名前の後に書くものです。gcc -Wall test.cならば-Walltest.cgccへ渡されます。

受け取る

C の基本:関数」で述べた通り、C プログラムのmain関数は

int main(int argc, char *argv[])
{
……
}

の形でも書けます。

argcはコマンドライン引数の数(count)、argvは argument variables で実際の引数が収められた配列です。char *argv[]は文字列(の先頭)へのポインタの配列です。

最初の例の様に、コマンドライン引数はスペース毎に区切られてargvに入るのですが、その前にargv[0]には必ず「プログラムの名前」が入る様になっています。例えば

#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 0; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}

をコンパイルしてabc.exeというプログラムにした場合、

> abc.exe test comandline args abc.exe test commandline args

と動作します。

解析する

gccなどの様にハイフン-から始まるコマンドライン・オプションはよく使われるので、POSIX 準拠の処理系限定ですがunistd.hgetoptという関数があり、これを用いて簡単に解析できます。

このサイトでは移植性の低いコーディングは推奨していない(「礼儀作法:移植性」を参照)ので説明はしませんが、知っておくと役に立つかもしれません。