[C言語のはじめ方] Part2: main関数の役割

C言語

C言語プログラムの出発点! main 関数を理解しよう

こんにちは! C言語学習の旅へようこそ 🎉
前回は開発環境の準備が整いましたね。今回は、いよいよC言語のプログラムがどのように動き出すのか、その心臓部とも言える「main 関数」について学んでいきましょう。 すべてのCプログラムには、この main 関数が必ず存在します。なぜ必要で、どんな役割を持っているのか、一緒に見ていきましょう!

main 関数ってなに? 🤔

main 関数は、一言でいうと「C言語プログラムの実行を開始する場所」です。 あなたが書いたC言語のコード(ソースファイル)をコンパイルして実行可能ファイルを作成し、それを実行すると、コンピュータ(OS)はまずこの main 関数を探して、そこから処理を始めます。

家に入るときは必ず玄関から入りますよね?🚪 C言語のプログラムにとって、main 関数はその「玄関」のようなものです。プログラム全体の処理は、この main 関数からスタートし、main 関数が終わるとプログラムも終了します。まさにプログラムの「司令塔」とも言える重要な関数なのです。

main 関数の基本的な形

まずは、最も基本的な main 関数の形を見てみましょう。これからC言語でプログラムを書くときは、ほとんどの場合、この形から書き始めることになります。

int main(void) {
    // ここにプログラムの処理内容を記述します

    return 0; // プログラムが正常に終了したことを示す
}

なんだか呪文のように見えるかもしれませんが、一つ一つ分解してみましょう。

  • int: これは main 関数が最終的に返す値の「型」を示しています。「int」は「integer(整数)」の略です。main 関数は、プログラムの実行が終了したときに、OS(オペレーティングシステム)に対して「実行結果はどうだったか」を伝えるために整数値を返します。慣習として、プログラムが正常に終了した場合は 0 を返し、何らかのエラーが発生して異常終了した場合は 0 以外の整数(例えば 1 など)を返します。
  • main: これが関数の名前です。この「main」という名前は特別で、C言語のルールとして「プログラムの開始地点はこの名前の関数」と決められています。自分で好きな名前に変えることはできません。
  • (void): これは main 関数が受け取る情報(引数 – ひきすう)が「何もない(void)」ことを示しています。プログラムを実行する際に、外部から情報を受け取ることもできますが、最初のうちは情報を受け取らないこの (void) の形で覚えておけば大丈夫です。(単に () と書くこともありますが、(void) と書くことで「引数がない」ことを明確に示せます。)
  • {}: この波括弧({ })で囲まれた部分が、main 関数の本体です。ここには、プログラムに実行させたい具体的な処理を記述していきます。コンピュータへの命令が並ぶ場所、と考えると良いでしょう。波括弧は必ずペアで使い、処理の始まりと終わりを示します。
  • return 0;: これは main 関数の処理を終了し、OSに 0 という値を返す命令です。先ほど説明したように、0 は「プログラムが正常に終了しましたよ」という合図になります。この return 文が実行されると、main 関数は終了し、プログラム全体の実行も終わります。main 関数の最後には、基本的にこの return 0; を書くようにしましょう。(厳密には省略できるケースもありますが、明示的に書くのが良い習慣です。)
  • ///* ... */: コードの中にある // から行末までや、/**/ で囲まれた部分は「コメント」と呼ばれます。コメントはプログラムの動作には影響を与えず、人間がコードを読みやすくするためのメモ書きとして使われます。

💡 ちょっと補足

main 関数の戻り値の型は必ず int にします。void main() のような書き方を見かけることもあるかもしれませんが、これは標準的なC言語の規格では推奨されておらず、環境によっては動作しない可能性もあるため、必ず int main(...) の形を使うようにしましょう。

main 関数の大切な役割 ✨

main 関数には、主に次のような重要な役割があります。

  1. プログラムの実行開始点
    OSはプログラムを実行するとき、必ず main 関数を探し出して、そこから処理を開始します。main 関数がなければ、プログラムはどこから実行を始めればいいのか分からなくなってしまいます。
  2. 処理全体の流れをコントロール
    main 関数の中に書かれた処理が、基本的に上から下へと順に実行されていきます。もちろん、後々学ぶ「関数」を呼び出すことで、処理を部品化して main 関数から呼び出すこともできます。main 関数は、それらの部品(関数)を組み合わせて、プログラム全体の動作を組み立てる司令塔の役割も担います。
  3. プログラムの終了点
    main 関数の最後まで処理が進むか、途中で return 文が実行されると、プログラムは終了します。つまり、main 関数はプログラムの「始まり」であると同時に「終わり」でもあるのです。
  4. OSへの終了ステータスの通知
    return 0; のように値を返すことで、プログラムが正常に終了したのか、それとも何か問題があって異常終了したのかをOSに伝えます。これは、特に複数のプログラムを連携させて使う場合などに重要な情報となります。

なぜ main 関数が必要なの?

プログラムは、たくさんの「関数」という処理のまとまりから構成されることが一般的です。もし main 関数のような「ここから始めてください」という特別な目印がなかったら、コンピュータはどの関数から実行を開始すればよいか判断できません。

そこで、C言語のルールとして「main という名前の関数を開始地点とする」というお約束事が定められました。これにより、OSは迷うことなくプログラムの実行を開始できるのです。これは、C言語だけでなく、JavaやC#など他の多くのプログラミング言語でも採用されている考え方です。

main 関数の引数について (軽く紹介)

先ほど main 関数の引数は (void) で「何もない」と説明しましたが、実は引数を受け取る形も存在します。

int main(int argc, char *argv[]) {
    // argc: コマンドライン引数の数
    // argv: コマンドライン引数の文字列配列
    return 0;
}

この argcargv を使うと、プログラムを実行するときに外部から情報(コマンドライン引数)を渡して、プログラムの動作を変化させることができます。例えば、ファイル名を指定してそのファイルを処理するプログラムなどで使われます。

ただ、これは少し応用的な内容になります。まずは引数なしの int main(void) の形に慣れることが大切です。コマンドライン引数については、学習が進んでから詳しく見ていきましょう。今は「こういう書き方もあるんだな」程度に覚えておけば十分です 👍

簡単なプログラムを書いてみよう! ✍️

それでは、実際に main 関数を使った簡単なCプログラムを見てみましょう。これは、画面に「Hello, C World! 👋」と表示するプログラムです。

#include <stdio.h> // printf関数を使うためのおまじない

int main(void) {
    // printf関数を使って画面に文字を表示する
    printf("Hello, C World! 👋\n");
    printf("main関数から実行されています。\n");

    return 0; // 正常終了
}

このコードを簡単に説明します。

  • #include <stdio.h>: これは「ヘッダファイル」を読み込むための指示です。stdio.h は、標準入出力(Standard Input/Output)に関する機能(関数など)がまとめられたファイルです。今回は、画面に文字を表示するための printf 関数を使いたいので、このヘッダファイルを読み込んでいます。今は「printf を使うためのおまじない」くらいに考えておいてください。
  • printf(...): これが、指定した文字列を画面(コンソールやターミナル)に出力するための関数です。"..." で囲まれた部分が表示されます。文字列の最後にある \n は「改行」を意味する特殊な文字です。

このコードを、前回構築した開発環境でコンパイル・実行してみてください。

  1. テキストエディタ(VS Codeなど)で上記のコードを入力し、hello.c のような名前で保存します。
  2. ターミナル(コマンドプロンプト)を開き、GCCやclangを使ってコンパイルします。
    gcc hello.c -o hello
    hello.c をコンパイルして hello という名前の実行可能ファイルを作成する、という意味です)
  3. エラーが出なければ、実行可能ファイルが作成されます。ターミナルで実行します。
    ./hello
    (Windowsの場合は hello.exe または hello かもしれません)
  4. 画面に次のように表示されれば成功です!
    Hello, C World! 👋
    main関数から実行されています。

この一連の流れを通じて、main 関数の中に書かれた printf の処理が実行されたことがわかりますね!

まとめ 🚀

今回は、C言語プログラムの心臓部である main 関数について学びました。

  • main 関数は、プログラムの実行が始まる特別な関数です。
  • プログラムは main 関数から処理を開始し、main 関数が終了するとプログラムも終了します。
  • 基本的な形は int main(void) { ... return 0; } です。
  • return 0; は、プログラムが正常に終了したことをOSに伝える重要な役割を持っています。

main 関数は、これからあなたが書くすべてのCプログラムの基本となります。まずはこの形をしっかりと覚えて、プログラムの「玄関」であり「司令塔」であることを意識しながらコーディングを進めていきましょう。

次回は、今回少しだけ登場した printf 関数や、ユーザーからの入力を受け取る scanf 関数など、「標準入出力」について詳しく学んでいきます。お楽しみに! 😊


コメント

タイトルとURLをコピーしました