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は中身が何もないという意味
コメント