#10

【C言語】メイン関数に引数を渡す方法(コマンドライン引数について)

こんにちは!Takuya.B(@TB_IQ)です。

C言語を学び初めのころにメイン関数の引数を(void)とするように、どのテキストでも書かれています。しかし、メイン関数に引数を持たせられないわけではありません。

そこで、今日はC言語のコマンドライン引数についてお話します!

スポンサーリンク

メイン関数に引数を持たせるには

メイン関数に渡す引数のことをコマンドライン引数と呼びます。ややこしい話は無しにして、とりあえず以下のサンプルコードを見てみましょう。

サンプルコード

#include <stdio.h>

int main (int argc, char *argv[])
{
  printf("入力した引数>>>%s", argv[1]);

  return 0;
}

メイン関数の引数にint argcchar *argv[]が含まれているのが分かります。

int argc

『int argc』は引数の総個数のことです。ちなみに実行の際のプログラム名も個数に含まれるので注意が必要です。

サンプル

./a.out aaa bbb ccc //引数の個数=4個 
./a.out aaa //引数の個数=2個 
./a.out //引数の個数=1個

引数の総個数はこのようになります。

char *argv[]

『char *argv[]』は引数の文字列を指すポインタの配列です。ポインタのややこしい話は無しにして、このargv[]の配列には上の例を参考にすると次の様に引数が格納されています。

argv[0] = "./a.out"
argv[1] = "aaa" 
argv[2] = "bbb" 
argv[3] = "ccc"

つまり、冒頭のサンプルコードを実行すると1つ目の引数が表示されます(プログラム名も含むので実際は2つ目だが)。

コマンドライン引数を用いるメリットは?

コマンドライン引数を用いるとプログラム実行時に入出力ファイルを指定できます。

過去にこのブログでも紹介したプログラム実行時に入出力ファイルを指定する方法よりも、コマンドライン引数を用いる方が簡単です。

また、詳しくは別の機会にお話しますが、シェルスクリプトを利用することで、毎回入出力ファイルを指定する手間が省けます。

スポンサーリンク

まとめ

今日はメイン関数の引数であるコマンドライン引数についてお話しました!

なぜか私の中にコマンドライン引数は難しいというイメージがあったのですが、全然そんなことありませんでした。

シェルスクリプトなどと組み合わせることで、いろいろと効率化できるので、非常に便利です!

シェルスクリプトの説明はまたの機会に!