乱数の例題(2)

外部から parameter を与える

前に示した 乱数の例題(2) の方法では 値を変えたくなる度に program を再 compile する必要がある。 このような値は再 compile せずに、外から与えたい。この要求を満たすために よく採られる方法は main() 関数の引数を利用する方法である。

main() 関数は、

int main(int argc, char* argv[])

という書き方ができる。ここで、argc は、この program の起動時に外から 与えられた(文字列) parameter の数で、argv は parameter を 表す argc 個の文字列の配列への pointer である。

配列名の argv は pointer と見なせるので、これは

int main(int argc, char** argv)

と書くこともできる。

なお、通常 argv[0] には program の名前(実行 file の名前)が入り、 起動時 parameter は argv[1] から入る。

C での例

/* argtest.c */

#include <stdio.h>

int main(int argc, char* argv[])
{
	int i;

	for(i = 0; i < argc; i++)
		printf("%d: %s\n", i, argv[i]);
	return 0;
}

上記 program を argtest.c という file に保存し、実行 image を argtest という 名前にする。

argtest Hello world.

とすると、

0: argtest
1: Hello
2: world.

となる。つまり space 毎に区切られた文字列が渡されることがわかる。一つの文字列 として渡したければ、二重引用符を使う。

argtest "Hello world."

とすると、

0: argtest
1: Hello world.

となる。

C++ で書いてみる

上記 program を C++ で書いてみる。上記 C program のままでも通るのだが、 ここでは少しだけ C++ らしくしてみる。

// argtest.cpp

#include <iostream>

int main(int argc, char* argv[])
{
	for(int i = 0; i < argc; i++)
		std::cout << i << ": " << argv[i] << std::endl;
	return 0;
}

ここでは、for 文の () 内で int i を宣言すると同時に初期値を与えている。 ここで宣言された int i の scope は、この for 内部になる。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-01-04 (月) 16:42:59