このサイトは更新終了し, こちらに移行しています。

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つの実数」は、コマンドラインから直接、プログラムに渡されている。

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

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

まず、これまでのほとんどのプログラムは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までの和を計算するプログラムを作れ。