【6日でできるC言語入門】main関数の引数の意味

C言語のmain関数には、「int argc, char** argv」という2つの引数があります。
 これまで何気なく使ってきた方も多いかもしれませんが、この引数はプログラムの実行時に「コマンドライン引数」を受け取るための重要な役割を持っています。
 ここでは、main関数の2つの引数の意味や役割、実際の使い方や具体例、そして実行環境ごとの違いまで、図や表を使って分かりやすく解説します。

1.main関数の引数とは

1.1. argc(引数の個数)

引数名意味
argcintコマンドライン引数の数(argument count)
  • プログラム名自体も1つの引数として数えられる。
  • 例えば、引数が無い場合でもargcは「1」になる。

1.2. argv(引数の配列)

引数名意味
argvchar**引数の文字列(コマンドライン引数)の配列
  • argv[0]には「実行ファイル名」が格納される。
  • argv[1]以降に、コマンドラインで指定した引数が順に格納される。

main関数の書式例

int main(int argc, char** argv)

または

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

どちらも同じ意味です。

2.コマンドライン引数の仕組み

2.1. コマンドラインから実行する流れ

C言語はもともと、UNIXなどのコマンドライン上で動作することを前提に作られました。
main関数の引数は、コマンドラインでプログラムに渡された情報を取得するために用意されています。

実行例と引数の内容

コマンド実行例argcの値argv[0]argv[1]argv[2]argv[3]
./myprog1./myprog(なし)(なし)(なし)
./myprog apple banana3./myprogapplebanana(なし)
./myprog "hello world"2./myproghello world(なし)(なし)
  • 文字列はスペースで区切られ、それぞれが1つの引数として配列に格納される。
  • ダブルクオーテーションで囲むと、スペースを含む1つの引数になる。

2.2. 引数にアクセスするサンプル

サンプルプログラム

プロジェクト/ファイル名: Lesson62_1/main.c

#include <stdio.h>

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;
}

実行例1(コマンドライン引数なし)

argcの値:1
argv[0] : C:\Users\joeac\source\repos\Lesson62_1\x64\Debug\Lesson62_1.exe

実行例2(コマンドライン引数あり)

1.Visual Studio 2022 で、コマンドライン引数を設定するには「プロジェクト」を右クリくしてプロパティを選択します。

2.「構成プロパティ」の「デバック」をクリックします。

3.「コマンド引数」という項目に「東京 大阪 名古屋」と入力して、「OK」ボタンをクリックします。

argcの値:4
argv[0] : C:\Users\joeac\source\repos\Lesson62_1\x64\Debug\Lesson62_1.exe
argv[1] : 東京
argv[2] : 大阪
argv[3] : 名古屋

3.実行環境ごとのポイント

3.1. Windows/UNIXの違い

  • argv[0]には実行ファイルのパス(絶対パスまたは相対パス)が格納される。
  • WindowsやUNIX(Linux、macOS)いずれでも同じ仕組みだが、パス表記(区切り文字)は異なる場合がある。
OSargv[0]の例
WindowsC:\Program Files\myapp.exe
UNIX/Linux/home/user/myapp

3.2. IDEやエディタでの引数指定

 Visual StudioやCode::Blocks、Eclipseなどの開発環境では、デバッグ設定などでコマンドライン引数を設定できる。
実際に引数を設定して動作を確認してみましょう。

4.実践例:コマンドライン引数のすべてを表示

4.1. サンプルプログラム

プロジェクト/ファイル名: Lesson62_2/main.c

#include <stdio.h>

int main(int argc, char** argv) {
    int i;
    printf("コマンドライン引数の一覧を表示します。\n");
    for (i = 0; i < argc; i++) {
        printf("argv[%d] : %s\n", i, argv[i]);
    }
    return 0;
}

実行結果

1.Visual Studio 2022 で、コマンドライン引数を設定するには「プロジェクト」を右クリくしてプロパティを選択します。

2.「構成プロパティ」の「デバック」をクリックします。

3.「コマンド引数」という項目に「あいう えお かきく」と入力して、「OK」ボタンをクリックします。

コマンドライン引数の一覧を表示します。
argv[0] : C:\Users\joeac\source\repos\Lesson62_2\x64\Debug\Lesson62_2.exe
argv[1] : あいう
argv[2] : えお
argv[3] : かきく

まとめ

  • main関数の引数「int argc, char** argv」は、コマンドライン引数を扱うためのもの。
  • argcは「引数の数」、argvは「引数の配列」で、argv[0]には実行ファイル名が入る。
  • コマンドラインから引数を渡すことで、柔軟なプログラムの入力や動作が実現できる。
  • 実際の開発環境で引数の指定や活用を試してみましょう。

main関数の引数を理解することで、プログラムの応用力がさらに広がります。