言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. C言語辞典
  3. main関数

main関数 対応: C89(1989)

C言語のプログラムは必ず『main』関数から実行が始まります。main関数はプログラムのエントリーポイント(入口)であり、すべてのC言語プログラムに1つだけ存在しなければなりません。

構文

// 引数を受け取らない場合。
int main(void) {
    // プログラムの処理
    return 0;
}

// コマンドライン引数を受け取る場合。
int main(int argc, char *argv[]) {
    // argc: 引数の個数(プログラム名を含む)
    // argv: 引数の文字列配列
    return 0;
}

引数の詳細

引数概要
argcintコマンドライン引数の個数です。プログラム名自体も含むため、引数なしで実行しても最低1になります。
argvchar *[]コマンドライン引数の文字列配列です。『argv[0]』はプログラム名、『argv[1]』以降がユーザーが渡した引数です。

戻り値

概要
0正常終了を意味します。慣習的に0は成功を示します。
0以外異常終了を意味します。具体的な値はプログラムが自由に定義できます。
EXIT_SUCCESS『stdlib.h』で定義された正常終了マクロです(通常は0です)。
EXIT_FAILURE『stdlib.h』で定義された異常終了マクロです(通常は1です)。

main関数の戻り値は、プログラムの終了コード(exit status)としてOSに返されます。シェルから echo $?(Unix系)や echo %ERRORLEVEL%(Windows)で確認できます。

サンプルコード

基本的な main 関数

hello.c
#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    return 0;
}
gcc hello.c -o hello
./hello
Hello, World!

コマンドライン引数を受け取る

greet.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("使い方: %s 名前\n", argv[0]);
        return 1; // 引数不足で異常終了します。
    }
    printf("こんにちは、%sさん!\n", argv[1]);
    return 0;
}
gcc greet.c -o greet
./greet
使い方: ./greet 名前
./greet 太郎
こんにちは、太郎さん!

複数の引数を処理する

args.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("引数の個数: %d\n", argc);
    for (int i = 0; i < argc; i++) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
    return 0;
}
gcc args.c -o args
./args foo bar baz
引数の個数: 4
argv[0] = ./args
argv[1] = foo
argv[2] = bar
argv[3] = baz

終了コードを活用する

exitcode.c
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    if (argc != 3) {
        fprintf(stderr, "使い方: %s 数値1 数値2\n", argv[0]);
        return EXIT_FAILURE; // 異常終了します。
    }
    int a = atoi(argv[1]);
    int b = atoi(argv[2]);
    printf("%d + %d = %d\n", a, b, a + b);
    return EXIT_SUCCESS; // 正常終了します。
}
gcc exitcode.c -o exitcode
./exitcode 10 20
10 + 20 = 30
echo $?
0

概要

main関数はC言語プログラムのエントリーポイントです。どんなに多くの関数を定義しても、プログラムの実行は必ず main 関数から始まります。main関数が終了する(return文に到達する)と、プログラム全体が終了します。

引数を使わない場合は『int main(void)』、コマンドライン引数を処理する場合は『int main(int argc, char *argv[])』と書きます。『void main()』と書くこともありますが、C言語の標準規格(C99以降)では main関数の戻り値は『int』と定められているため、『int main』を使用してください。

main関数の戻り値はプログラムの終了コードとしてOSに伝わります。シェルスクリプトや他のプログラムからプログラムの成功・失敗を判定するのに使われるため、正常終了時は『0』(または『EXIT_SUCCESS』)を、異常終了時は『0以外』(または『EXIT_FAILURE』)を返すようにしましょう。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。