[C/C++] main関数の戻り値を理解しよう!

妹「void main(){ }」

兄「ん。void mainか……」

妹「うん……。ポチポチポチ」

兄「……」

妹「……あのさ。この一番最初のmain関数からプログラムが開始されるのは解るんだけど、このvoidって何?」

兄「えっ……なんでそんな事しらないんだよ。本に書いてあるだろ?」

妹「書いてないよ、ほら……」
ここではそういうものだとしてvoid main(){}と書きましょう。
おまじないみたいなものだと思ってint main()と書いてください。
ルールなのでint main()にしましょう

兄「……えっ、ほんとだ!?そういえば俺も最初はそれおまじないだと思ってたな……多分、一番最初の章だし、とりあえず一つ一つ書いたり説明するよりも。読んでりゃ解るだろうってスタンスだと思う。でも、この後に型の説明と関数の戻り値の説明とって、そういうのがあるだろ……?」

妹「あるけど、結局この戻り値って何なの?」

兄「値が戻ってくるだろ?下図のこういう感じだよ。」

PlantUML diagram

妹「……関数は、int k=kansuu();とすると、kに値が戻ってくるけど。これ?」

兄「そう、それ」

妹「mainはどこに戻ってくるの……?」

兄「コマンドプロンプトに戻るだろ?」

妹「コマンドプロンプト!?」

ああnに

兄「ほら、コマンドプロンプトの%errorLevel%に入ってる。これで条件分岐をしたりするんだよ」

妹「本当だ……なんで本にあんまり書いてないんだろ」

兄「OSによっても戻り値の格納先が違ってて、その解説でこのOSならここ。このOSならここって書いていくと、プログラムの説明をしろや!と怒る人がいるんじゃないかと。
それで関数の方の戻り値を受ける所で、『おまじないと言ってたmain関数もこんな感じだよ!』みたいな一文があったりする。
後は理解してたらできるだろう?と」

妹「……私、ずっとプログラムを動かすためのおまじないだと思ってたよ」
兄「どこのまじない師だよ……」