とらりもんHOME  Index  Search  Changes  Login

とらりもん - 引数の与え方 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

<[[C言語入門]]に戻る>

 プログラムに何かの値を渡すには、標準入力だけでなく、コマンドラインから行うこともできる。例として、以下のプログラムを考える:

    /* add2.c
     * usage (example): $ ./add2 1.2 3.6
     * compile: $ gcc add2.c -o add2
     * 2008/07/16 K. Nasahara
     */
    # include <stdio.h>
    # include <stdlib.h>
    main(int argc, char **argv)
    {float x, y;
     x=atof(argv[1]);
     y=atof(argv[2]);
     printf("%f + %f = %f\n", x, y, x+y);
    }

コンパイルと実行:
$ gcc add2.c -o add2
$ ./add2 1.2 3.6
1.200000 + 3.600000 = 4.800000

このように、これは2つの実数の和を求めるプログラムである。2つの数の和を求めるプログラムは, [[最初にも作った|C言語入門: 1. 体験]]が, それとはちょっと違う。ここでは, 「2つの実数」は、{{fontc(コマンドラインから直接、プログラムに渡されている, red)}}のだ。

 無論、「2つの実数」は標準入力から渡してもいいのだが、目的によっては、標準入力には別のデータを流し込むために、あえてこのようにコマンドラインから情報(この場合、引数という)を渡すほうが好都合なことも多い。特に、このようなスタイルは、シェルスクリプトとの相性が良く、シミュレーションなどで多用される。

 さて、この仕組みをざっくりと見ておこう。

 まず、これまでのほとんどのプログラムはmain()だった部分が、今回はmain(int argc, char **argv)になっている。argcとargvという名前の変数は、このような場合には「お約束」で登場する。argcには、コマンドラインからの引数の数が入る。argvは、文字列の「ポインタのポインタ」である。詳細な仕組みは割愛するが、argv[0]という文字列(配列)に、ゼロ番めの引数としてコマンドそのものの名前が入り、argv[1]には1番めの引数(この場合は1.2とか)が入る。以下、同様である。

 さて、"1.2"という引数は、プログラムに渡された時点では、文字列として認識されている。これを、実数として認識しなおすために、x=atof(argv[1]);という関数を実行している。このatofという関数は、文字列として表現された実数を、実数として認識するものである。また、この関数を使うために、プログラムの最初の方で、stdlib.hというライブラリを使うことを宣言している。ちなみに、文字列を整数として認識する関数はatoiである。

----
''課題1'': コマンドラインから正の整数nの値を得て、1からnまでの和を計算するプログラムを作れ。

<[[C言語入門]]に戻る>