main関数 対応: C89(1989)
C言語のプログラムは必ず『main』関数から実行が始まります。main関数はプログラムのエントリーポイント(入口)であり、すべてのC言語プログラムに1つだけ存在しなければなりません。
構文
// 引数を受け取らない場合。
int main(void) {
// プログラムの処理
return 0;
}
// コマンドライン引数を受け取る場合。
int main(int argc, char *argv[]) {
// argc: 引数の個数(プログラム名を含む)
// argv: 引数の文字列配列
return 0;
}
引数の詳細
| 引数 | 型 | 概要 |
|---|---|---|
| argc | int | コマンドライン引数の個数です。プログラム名自体も含むため、引数なしで実行しても最低1になります。 |
| argv | char *[] | コマンドライン引数の文字列配列です。『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』)を返すようにしましょう。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。