Linux講座にようこそ。このページは「C言語プログラミング入門 - 第9章.プログラムの部品化のための関数」です。

C言語プログラミング入門

9. プログラムの部品化のための関数(3/3)

9.4 実行時引数の受け取り方

実行時引数の受け取り方
【図9-5】実行時引数の受け取り方

UNIX系OSではコマンドを使った操作が良く行われています。例えば、lsコマンドは次のような使い方になります。

ls -l /usr

この例の場合、「ls」はコマンド名、「-l」や「/usr」は引数とかパラメータと呼ばれています。当講座では関数の引数と区別するために「実行時引数」と呼ぶことにします。実行時引数はコマンドに渡すデータです。

C言語はUNIXを記述するために作られた言語ですので、C言語で記述したプログラムは当然のことながら、実行時引数を受け取ることが出来ます。実行時引数はmain関数に2つの引数として渡ってきます。第1引数はコマンド名を含めた実行時引数の個数で、第2引数は実行時引数の値そのものでポインタの配列です。ちなみに、第1引数は「argc」、第2引数は「argv」という名前にすることが習慣になっています。

9.4.1 形式

※ main関数の定義
int main(int argc, char *argv[])
{
    …
    return 値;
}
int argc
コマンド名(実行可能プログラムファイルのパス名)を含む実行時引数の個数です。
char *argv[]
実行時引数の値そのものです。個々の実行時引数は文字列として取り扱うことができます。

9.4.2 例題

実行時引数に体重と身長を指定すると、肥満度(BMI)を出力するプログラムです。肥満度の計算はソースファイルex09_3_2.cに定義済のCalcBmi関数を使用します。

  1. /* ソースファイル名:ex09_7.c */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main(int argc, char *argv[])
  5. {
  6.     double  weight;
  7.     double  height;
  8.     double  bmi;
  9.     int     return_code;
  10.     /* CalcBmi関数のプロトタイプ宣言 */
  11.     double CalcBmi(double BmiWeight, double BmiHeight);
  12.  
  13.     if(argc == 3)
  14.     {
  15.         weight = atof(argv[1]);        /* 第1引数(体重)をdouble型に変換 */
  16.         height = atof(argv[2]);        /* 第2引数(身長)をdouble型に変換 */
  17.  
  18.         /* 肥満度(BMI)を返り値として取得 */
  19.         if((bmi = CalcBmi(weight, height)) > 0.0)
  20.         {
  21.             printf("肥満度は%.2fです\n", bmi);
  22.             return_code = 0;
  23.         }
  24.         else
  25.         {
  26.             printf("体重又は、身長の値が不当です\n");
  27.             return_code = 1;
  28.         }
  29.     }
  30.     else
  31.     {
  32.         printf("実行時引数の数が不当です\n");
  33.         return_code = 1;
  34.     }
  35.  
  36.     return return_code;
  37. }
$ gcc -o ex09_7.prg ex09_7.c ex09_3_2.c ← CalcBmi関数を定義しているex09_3_2.cも指定します
$
$ ./ex09_7.prg 69.6 174.5 ← 実行時引数として体重と身長を指定します
肥満度は22.86です
$
$ ./ex09_7.prg 69.6
実行時引数の数が不当です
$
4行目
実行時引数を受け取るために仮引数のargcとargvを指定します。
15行目
実行時引数の第1引数の体重をライブラリ関数のatof関数を使用してdouble型に変換します。実行時引数は文字列として渡ってきますので、そのままでは数値として使用することは出来ません。atof間数を使う場合は3行目の#include <stdlib.h>が必要です。
16行目
実行時引数の第2引数の身長をdouble型に変換します。
19行目
CalcBmi関数を呼び出して、肥満度(BMI)を取得します。