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言語入門に戻る>
Keyword(s):
References:[C言語入門] [C言語による画像処理: 明るさの調整・GIFアニメ]