外部から 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 内部になる。 |