![]() |
|
コマンドライン引数を受け取るには?コマンドラインで指定された引数を使うと、プログラムの応用の幅が広がることを知ろう コマンドライン引数を利用したプログラムコマンドの引数と言っても、ピンとこない人も多いかと思います。例えばMS-DOSでは、dirというコマンドで現在のディレクトリのファイルを表示できますが、オプションを指定すると、表示が少し変わります。この「/w」オプションが、ここでいう引数です。
この例は重要で、Windowsでは関連付けの機能により、テキストファイルをダブルクリックすると、裏でこのようなことと同じ事が実行されています(別にMS-DOSを起動してやっているわけではないのですが)。よって、このような引数に対応した自分で作ったプログラムと、ある拡張子を関連付ければ、エクスプローラなどでそのファイルをダブルクリックするだけで、そのファイルが開かれたプログラムを起動させることができるようになるのです。 main関数の隠された引数いままでmain関数には引数は指定していませんでしたが、じつはmain関数の引数でコマンドラインの引数を受け取ることができます。引数は必ず次のような型になっています。 main(int argc, char *argv[]) argcにはコマンド名も含んだ、コマンドライン引数の個数が入ります。argvには、それぞれのコマンドライン引数へのポインタが入ります。このようにargvは配列になっているので、引数をいくつ渡しても処理できるようになっています。例えば、渡された全ての引数を表示するプログラムは、以下のように作ることができます。
そして、このプログラムを実行すると、次のようになります。
このように、argv[0]の内容は、自分自身のプログラムの名前になっています。この情報を使って、自分のディレクトリを知るということもできます。また、Windows環境の場合、ファイル名の中にスペースが入ることがありますが、そのようなファイルを指定したい場合は、このようにダブルコーテーションマークで囲めばいいことが分かります。 main関数の戻り値は?main関数の引数は分かりました。では、main関数の戻り値はどうなるのでしょうか? 実はC++では、main関数の戻り値はint型でなくてはならないと決められています。C言語でもそうするほうが良いでしょう。main関数の引数はOSによって渡されていますが、戻り値も同じようにOSへ返されています。しかし、あまりこれについては意識しなくても良いでしょう。通常は終了するときに「0」を返し、異常終了するときにその他の値を返します。 この戻り値はどのように利用されているのでしょうか。MS-DOSの場合、バッチファイルで処理するときに「ERRORLEVEL」として扱うことがあります。例えば以下のようなプログラムは、引数を渡すと0、渡さないと1を返します。
このプログラムをERR.EXEとして、以下のようなバッチファイルを作ります。
このバッチファイルは、引数をERR.EXEに渡して、errorlevelが1なら「引数を指定してください」と表示するものです。このバッチファイルをTEST.BATとしておくと、実行結果は以下のようになります。
これはあまりにもつまらない例ですが(だったらやるな、という批判は置いておいて...)、戻り値はどのように利用されるのかという一例をあげておきました。 まとめ。
(1999/03/13 公開) [目次へ] [次へ] |
![]() |
著作権は全て小出 俊夫にあります。KID's World © 1996-2003 Toshio Koide.