C言語のmainとはなにか?

プログラミング知識

C言語でプログラミングするとき、必ず記述するmain。いったい何か、意味もわからずに書いている人も多いはず。

実際にわたしもmainは”おまじない”と習ったため、とくに気にしていませんでした。

しかしmainは”おまじない”でも、意味のないものでもありません

ここでしっかりmainの意味を理解しておきましょう。

この記事はこんな人におすすめ
  • C言語を学びはじめで、より理解を深めたい人
  • mainの意味を知りたい人
  • mainの引数の意味が知りたい人

mainの定義について確認

まずmainの定義について、確認しておきましょう。C言語の仕様書によると次のように定義されます。

int main(void) { /* ... */ } int main(int argc, char *argv[]) { /* ... */ }
Code language: CSS (css)

これは関数の書式と同じです。実はmainは関数です。

最初のintはmain関数の戻り値、()の中のvoidなどはmain関数の引数です。

このmain関数はプログラム内に必ず1つ必要です。

intやvoid、argcなどについても後ほど確認していきましょう。

mainの役割

ではmainの役割はなんでしょうか?

mainはプログラム内に必ず書かなければなりません。

その理由は、プログラムが実行された時に、一番最初に呼び出される関数はmainと決められているからです。

つまり他の関数を最初に実行することはできない!というのがC言語の仕様なのです。

戻り値はint以外定義できない?

mainの定義を確認すると、戻り値の型はintとなっています。

int以外のvoidやcharは定義できないのでしょうか?

結論からいうとint以外定義できません。これもC言語の仕様で決められています。

ですから、main関数の最後のreturn文も省略してはいけません

省略してもコンパイルが通る場合もありますが、警告が表示されているはずです。

通常、処理が成功した場合は、return 0とし、呼び出し元に0を返します。コンソールから実行した場合、コンソールに0が返されることになります。Linuxで実行している場合は、echo $?と入力してみてください。プログラムの戻り値が表示されます。

エラーが発生した場合は、return -1などとして、呼び出し元にエラー終了したことを伝えるようにしましょう。

引数のvoidやargcはなに?

main関数は引数を取ることができます。

コンソールからプログラムを実行するときに、./a.outのように記述しますが、これに続いてプログラムのオプションを記述できます。

./a.out option1 option2

このように記述すると、argcにプログラム実行とオプションの合計である3が、argv[]にはオプションのoption1とoption2が入ります。argはargument(引数)の略で、cはcount(数)、vはvalue(値)を意味しています。

main(void)のように記述すると、引数はなにもない、ということになります。仮にプログラム実行時にオプションが指定されても無視されます。

voidとは中身がないという意味です。

まとめ

C言語でのmain関数の役割について紹介しました。

しっかりmain関数や引数について理解しておくと、無用なバグを回避できますので、しっかり理解しておきましょう。

またmain引数も起動オプションを利用するために、理解が必須になりますので合わせて覚えておきましょう。

  • main関数は、プログラムで最初に実行される関数
  • 戻り値は必ずint型でreturn文を省略できない
  • 起動オプションを使いたい場合は、argcとargvを引数に定義する。
  • voidは中身が何もないという意味

コメント

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