メイン関数の引数について

int main(void)

引数がないメイン関数には、voidを書いておく。 このプログラム hello1.cpp

/* hello1.cpp */
#include <stdio.h>
int main(void)
{
  printf("Hello!\n");
  return 0;
}
を作成し、コンパイルする。 エラーが発生しなくて、うまくいけば、 UNIX系のプログラミング環境下で、 実行ファイルa.outができる。

./a.out [returnキー入力] を実行

これは、メイン関数に引数がない場合の実行方法だ。 目の前の画面に、
Hello!
と表示される。

main(int argc, char *argv[])

メイン関数の引数 の場合は、このようにする。

今度は、次のプログラム mainarg0.cpp

/* mainarg0.cpp */
#include <stdio.h> /* printf */
int main(int argc, char *argv[])
{
  int i;
  printf("argc=%d\n",argc);
  for(i=0; i<argc; i++){
    printf("*argv[%d]=%s\n", i, argv[i]);
  }
  return 0;
}
を作成し、コンパイルする。 エラーが発生しなくて、うまくいけば、 UNIX系のプログラミング環境下で、同様にして、 実行ファイルa.outができる。 名前は同じだが、hello1.cpp とは、別の実行ファイル。

./a.out [returnキー入力] を実行

これは、引数がない場合と同じ実行方法である。 実行結果は、目の前の画面に、
argc=1
*argv[0]=./a.out
と表示される。

実行は「./a.out」の入力1個だけなので、 argcの値は整数で、 argc = 1となる。 また、文字列*argv[0]は、入力した文字列「./a.out」となる。

./a.out 0.5 [returnキー入力] を実行

これは、メイン関数の引数に、0.5を入れた場合の実行方法である。 実行結果は、 目の前の画面に、
argc=2
*argv[0]=./a.out
*argv[1]=0.5
と表示される。

実行の際、「./a.out」と「0.5」の2個の入力なので、 整数変数argcの値は、 argc = 2となる。 また、 また、文字列*argv[0]は、最初に入力した文字列「./a.out」となり、 文字列*argv[1]は、次に入力した文字列「0.5」となる。

./a.out niihama ehime japan [returnキー入力] を実行

実行結果は、 目の前の画面に、
argc=4
*argv[0]=./a.out
*argv[1]=niihama
*argv[2]=ehime
*argv[3]=japan
と表示される。

./a.out 0 0.1 0.9 1 2 [returnキー入力] を実行

実行結果は、 目の前の画面に、
argc=6
*argv[0]=./a.out
*argv[1]=0
*argv[2]=0.1
*argv[3]=0.9
*argv[4]=1
*argv[5]=2
と表示される。

まとめ

main関数に引数を与えるには、 整数変数argc と文字列*argv[]を利用できる。

「./a.out」も含めた引数の個数がargcで、 各文字列は、*argv[]となる。


kurihara @ ect.niihama-nct . ac . jp