こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

main関数の戻り値について

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

投稿日時 - 2011-03-07 19:26:11

QNo.6576489

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

voidにしても、正直特に問題は起きないのですが、
intでやってないと、規約違反だの何だのと文句が来たりします。

私自身は、intで宣言して、return 0;で終了するのを当たり前のようにやってます。
文句言われるくらいなら、これくらいのことはやっておいて損はないでしょう。

さて、戻り値の意味ですが、
プログラムは人間が起動するとは限らないというのが答えですね。
呼び出しもとのプログラムには、戻り値が返ってきます。
これが、戻り値の存在意義です。


他のプログラムにとっては、そのプログラムはブラックボックスですから、
仕様に沿って、0やらなんやらが返ってくることを期待するかもしれません。

なので、必ず正常終了するプログラムでも0を返しておけば安心です。

投稿日時 - 2011-03-12 00:36:38

ANo.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

投稿日時 - 2011-03-09 09:37:18

ANo.2

今使っているのはWindowsでしょうか?
BATファイルで、ERRORLEVELを使って、コマンドの実行結果で分岐させる、という方法があるのはご存知でしょうか?

あるいは、使っているのはLinux等でしょうか?
シェルスクリプトでif や while が何を使って条件分岐しているかご存知でしょうか?


これらに使われるのが、main関数の戻り値です。
通常、正常終了が0,それ以外の終了は0以外、という約束になっています。
単に「失敗」という以外に、その「失敗」内容を、違う戻り値を使って示す場合もあります。

voidにすると、戻り値は必要ないですが、終了コードも不定になります。大抵は0ではありません。
BATやシェルスクリプトで組合せて使わないのなら、どちらでもいい、といえばそうなのですが....
私は、正常終了したのに異常終了したように見えるのが嫌なので、0を返すようにしています。

投稿日時 - 2011-03-07 20:35:02

ANo.1

簡単に言ってしまえば、戻り値というのは「成功したのか失敗したのか」を意味しています。
例えば、0なら成功、1なら失敗。そのような値を決め事として返すのです。

もし失敗していたら、データを直して再度実行をしなければいけないかもしれませんし、
成功していたら次の処理を行うかもしれません。
そのような判断に使う為のものです。


戻り値を返さなくても問題無いか?
まずルールとしては、void型にすればreturnで値を返さなくともエラーは発生しません。
というか、「return;」と戻り値無しのreturnを書いたりします。気分として。

値を返さない事で何か困らないか?という点で言えば、「使い方次第」としか言えません。
恐らく「必要無いんじゃね?」と思う間は返さなくても困らないだろうとは思います。

投稿日時 - 2011-03-07 19:52:13

あなたにオススメの質問