C の知識:コマンドライン引数
コマンドライン引数とは gcc へソースファイルを指定する時の様に、コマンドラインでプログラムの名前の後に書くものです。gcc -Wall test.cならば-Wallとtest.cがgccへ渡されます。
受け取る
「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.hにgetoptという関数があり、これを用いて簡単に解析できます。
このサイトでは移植性の低いコーディングは推奨していない(「礼儀作法:移植性」を参照)ので説明はしませんが、知っておくと役に立つかもしれません。