6.9 main()関数のパラメータ
6.9.1 コマンドライン引数
main() 関数も引数を受け取ることができます。では main() 関数はどこから引数を受け取るのでしょうか。main() 関数は、自身を起動させら親プロセスから、起動時に指定されたオプションを文字列で受け取ります。通常はコマンドラインから渡すことになるでしょう。これによって、プログラムの起動に必要な情報を要求することができるようになります。
main()関数には、二つの引数が渡されます。一つはコマンドラインから渡された引数の数。もう一つはコマンドライン引数で渡された文字列です。伝統的に第一仮引数を argc、第二仮引数を argv と名づけます。argc には引数の数が、argv には引数の文字列が入ります。そのため、一般的な main() 関数は、これまで使ってきた引数を受け取らない形式に加え、引数を受け取る形のいずれかを使うことができます。
int main(int argc , char *argv[])
コマンド引数を処理する場合は、上記の形式を使う必要があります。仮引数の名前は任意ですが argument count を省略した argc と、argument vector を省略した argv を使うのが慣行となっています。配列変数 argv にアクセスすることで、指定された番号のコマンド文字列を取得することができます。
#include<stdio.h> int main(int argc , char *argv[]) { int iCount; for(iCount = 0 ; iCount < argc ; iCount++) printf("第%d引数 = %s\n" , iCount + 1 , argv[iCount]); return 0; }
コード1は、main() 関数に与えられた引数を表示するというものです。argc が正数の場合 argv[0] は、必ず実行されたプログラムの名前であることが定められています。argc が 1 以上の値であれば、何らかのコマンド引数が渡されていることを表します。
実行結果のように、 コマンド引数は文字列テーブルとして保存されているため argc を調べて argv の適切な要素にアクセスすることで目的の引数を得ることができるでしょう。実質的な最初の引数は argv[1] であり、必ず最後の引数は argv[argc - 1] となります。加えて標準規格では argv[argc] が NULL であることを保証しています。