質問: return文について c言語を独学で勉強中です。 最初から分からないのがあったので、質問させていただきます。 #include main() { printf("hello world!!\n"); return(0); } return(0)を記入しなくてもエラーはでないのに、 なぜ必要なんですか? 参考書には何も書いてないので分かりません。 よろしくお願いします。
回答: cが生まれたころまでさかのぼると、「シェルに返すため」であったと思います。 その後、cがいろいろなプラットフォームに移植され、規格が整備されるにつれて、「シェルに返すため」という理由では処理系依存になってしまうため、main関数の意味についても定義しなおされることとなりました。 その際、main関数の型は以下のどちらかにすることと決められました。 int main(void); int main(int argc, char *argv[]); どちらの場合でも、戻り値を持つことになるので、return文は省略できないのです。 なぜ、必ず戻り値を持つように決めたのかは決めた本人に聞かないとわかりません。まあ歴史的しがらみと考えてもいいんじゃないかと思います。 なお、処理系によっては、 void main(); というmain関数を許すものもあります。しかし、これはで処理系依存になってしまいますから、あまりおすすめできる書き方ではありません。 なんとなく無駄っぽくても、 return 0; と書いておくのが行儀のいいプログラムといえるでしょう。