• 締切済み

main関数の戻り値について

c言語において、main関数の戻り値は何を意味しているのですか。 また、void型にすれば、main関数の戻り値を書かなくても問題無いでしょうか。 また、関数はreturn文を書かなくても、最後まで処理を実行すると終了するらしいですが、void型にすれば、main関数でreturn文を書かなくても問題無いでしょうか。

みんなの回答

回答No.4

voidにしても、正直特に問題は起きないのですが、 intでやってないと、規約違反だの何だのと文句が来たりします。 私自身は、intで宣言して、return 0;で終了するのを当たり前のようにやってます。 文句言われるくらいなら、これくらいのことはやっておいて損はないでしょう。 さて、戻り値の意味ですが、 プログラムは人間が起動するとは限らないというのが答えですね。 呼び出しもとのプログラムには、戻り値が返ってきます。 これが、戻り値の存在意義です。 他のプログラムにとっては、そのプログラムはブラックボックスですから、 仕様に沿って、0やらなんやらが返ってくることを期待するかもしれません。 なので、必ず正常終了するプログラムでも0を返しておけば安心です。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

mainはint型の値を返さなければなりません。 返却値の型をvoidにした場合、具体的には、void main(void)やvoid main(int artgc, char *arg[])のようにした場合は通常未定義の動作になります。 mainの返却値の型をintにした場合でも、C99以降であれば、return文がなければ関数の末尾にreturn 0;を書いたものとみなされます。

参考URL:
http://www.kijineko.co.jp/tech/superstitions/void-main.html
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

今使っているのはWindowsでしょうか? BATファイルで、ERRORLEVELを使って、コマンドの実行結果で分岐させる、という方法があるのはご存知でしょうか? あるいは、使っているのはLinux等でしょうか? シェルスクリプトでif や while が何を使って条件分岐しているかご存知でしょうか? これらに使われるのが、main関数の戻り値です。 通常、正常終了が0,それ以外の終了は0以外、という約束になっています。 単に「失敗」という以外に、その「失敗」内容を、違う戻り値を使って示す場合もあります。 voidにすると、戻り値は必要ないですが、終了コードも不定になります。大抵は0ではありません。 BATやシェルスクリプトで組合せて使わないのなら、どちらでもいい、といえばそうなのですが.... 私は、正常終了したのに異常終了したように見えるのが嫌なので、0を返すようにしています。

回答No.1

簡単に言ってしまえば、戻り値というのは「成功したのか失敗したのか」を意味しています。 例えば、0なら成功、1なら失敗。そのような値を決め事として返すのです。 もし失敗していたら、データを直して再度実行をしなければいけないかもしれませんし、 成功していたら次の処理を行うかもしれません。 そのような判断に使う為のものです。 戻り値を返さなくても問題無いか? まずルールとしては、void型にすればreturnで値を返さなくともエラーは発生しません。 というか、「return;」と戻り値無しのreturnを書いたりします。気分として。 値を返さない事で何か困らないか?という点で言えば、「使い方次第」としか言えません。 恐らく「必要無いんじゃね?」と思う間は返さなくても困らないだろうとは思います。

関連するQ&A