とらりもんHOME  Index  Search  Changes  Login

C言語入門7. 引数の与え方

<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つの数の和を求めるプログラムは, 最初にも作ったが, それとはちょっと違う。ここでは, 「2つの実数」は、コマンドラインから直接、プログラムに渡されているのだ。

 無論、「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言語入門に戻る>

Last modified:2012/05/13 14:27:24
Keyword(s):
References:[C言語による画像処理: 明るさの調整・GIFアニメ] [C言語入門]