- ベストアンサー
C言語 exitの使い方
exit(0)とexit(1)の使い分けが理解できなくて困っています。 1と0では真・偽正反対の意味だと思ってしまいます。 return 0 は正常終了。return -1は異常終了と覚えているのですが、exitの場合はどう使い分けているのでしょうか?なにか決まりがあるのでしょうか? すみませんが、教えて下さい。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
慣用的に、 正常終了ならexit(0); 異常終了ならexit(1); としています。 exit(x);とreturn x; は、同じ意味となります。 (C言語の規格で、main()からreturnする終了は、 exitの終了と同等となっている) 正常終了ならexit(0);もしくはreturn 0;は意見が分かれないと思います。 問題は、異常終了の時1とするか-1とするかですが、 これはどっちでもいいです。 気になるなら、stdlib.hで定義されているEXIT_FAILUREマクロを使って、 exit(EXIT_FAILURE); とすればいいでしょう。 エラーの種類によって値を変えてもいいし。 ところで、exit(0);とexit(1);の違いですが、 Windowsの場合、実はあまり意味がありません。 この値は、バッチファイルの中でエラーレベルとして 取得されます(詳細は略)。 昔のプログラムの中には、 エラーレベルの値によってバッチファイルに情報を伝えるというものがありました。 しかし現在はバッチファイルの使用は少なくなってきており、 終了時に0を指定使用が1を指定しようが、 その値を利用されることがほとんどありません。 ただ、なんとなく、正常終了ならエラーレベル0、以上ならそれ以外、としています。 UNIXやLinuxで、コンソールで動くツールならば、 利用される場面はあります。 (「終了ステータス」として、シェル(.shや.csh)の中で使えます)
その他の回答 (2)
- toysmith
- ベストアンサー率37% (570/1525)
> return 0 は正常終了。return -1は異常終了と覚えているのですが 「main()のreturn」と「exit()」の話って理解で話を続けます。 一般的にプログラムの終了は 1.正常の終わった 2.正常ではないが終わった 3.死んだ/殺された の3種です。 3はOS(または、OSに近いシステムソフトウェア)が直接関与するのでちょっと違う次元の話。 問題は1と2の違いをOS(または、OSに近いシステムソフトウェア)に伝える方法です。 普通「正常」という状態は一種類しかありません(すべてがオッケー)。 しかし、「正常でない」という状態は無数にあります。 よって、「正常=0、0でない時は何らかの異常」という使い方になります。 > return -1 終了ステータスに負の値を設定したときに、OS(または、OSに近いシステムソフトウェア)が符号をちゃんと認識するかどうか? 処理系依存なので、OSの指定がない限り正の整数を使ったほうが安全だと思います。
お礼
詳しいご解答ありがとうございます! returnの返す値は自分で指定できるんですね^^; 認識なども全然知らなかったので、とても勉強になりました! 本当にありがとうございました!
- 100Gold
- ベストアンサー率27% (284/1018)
exit(0)が正常終了です。 0以外は全部異常終了です。 returnも同じです。
お礼
明解なご解答をいただきまして、ありがとうございます!おかげでホッとしました!
お礼
詳しいご解答をありがとうございます! 今までは-1を使うものだと思っていましたが、 今回いろいろ教えていただいて、私の根本的な考え方の間違いがあったことがわかりました。 正しく理解できて嬉しく思っています! 本当にありがとうございました!またいろいろ調べてみます。