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

解決済みの質問

exitとreturnの使い分け

通常の開発でexitは使ってもいいのでしょうか?
main以外の関数でbool型でmainに処理を戻しプログラムを終了させるのと、関数内でexitを使い処理を終了させることの違いと具体的にどういう場合に使い分けたらいいのかを教えてください。

できるだけ詳しく教えてもらえるとうれしいです。

投稿日時 - 2005-03-15 09:48:08

QNo.1270220

すぐに回答ほしいです

質問者が選んだベストアンサー

ANSI規格では、mainの中で使う限りにおいては、returnとexitに関しては違いがありません。
関数の中で使った場合、returnはその関数を呼び出した関数に対して値を返すのに対し、exitはそのプログラムを呼び出した他のプログラム(OSや他のプロセス、サービスなど)に対して値を返します。
これらを念頭において使い分ければいいと思います。

私の場合は、exitはmainと各関数でプログラムの仕様上エラーに対処できない場合にプログラムを強制終了したい場所で使います。
それ以外の場所ではreturnを使います。

投稿日時 - 2005-03-15 10:55:28

補足

とても分かりやすかったです、ありがとうございます。
エラー処理の仕方によって使い分けたらよいということでしょうか?

余談ですが、皆様親切で優劣がつけ難く困ってしまいます、感謝します。もう暫く回答を募らせて頂いて質問を閉じさせて頂くつもりです。

投稿日時 - 2005-03-15 11:16:01

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

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

回答(5)

ANo.5

私の場合、main以外の下位関数では、次のように場合わけして組んでいます。

1.エラーで強制終了が必要な場合exitでエラーコードを返してプログラムを終了

2.エラーがその関数内で修復可能であればreturnで正常終了のコードを返す

3.その関数内でエラー処理できないが、呼び出しもとの関数でエラー処理できれば、returnでエラーに対応したエラーコードを返し、上位の関数でエラー処理をする

投稿日時 - 2005-03-15 12:47:29

お礼

なるほど、やはりできる限り上位の関数に処理を戻した方がいいということでしょうか。 なかなか本には載っていない価値のあるアドバイスを頂けてうれしいです。
ありがとうございました。

投稿日時 - 2005-03-16 11:08:24

ANo.4

> newで生成したものはexitで終了するとどうなるのでしょうか?

どうにもなりません。これはmain関数からreturnした場合でも同じです。
newで生成したものは、プログラマの責任でdeleteする必要があります。

投稿日時 - 2005-03-15 11:39:11

ANo.2

bool型を使うとのことなのでC++だと判断します。(C99の可能性もありますが...)

exit関数でプログラムを終了させると、自動記憶域に生成したインスタンスのデストラクタが呼ばれません。デストラクタで行っている処理によっては、かなり深刻な不具合になる可能性があります。
できれば例外をスローして、main関数でreturnする方が安全です。

投稿日時 - 2005-03-15 10:34:12

補足

なるほどデストラクタの件大変参考になりました。
的が外れていたらすみませんが、newで生成したものはexitで終了するとどうなるのでしょうか?

WM_DESTROY等で明示的にdeleteしないとどうなるのでしょうか?

投稿日時 - 2005-03-15 11:04:27

ANo.1

サブルーチン内にEXIT命令を入れるのは避けるべきです。
非常にデバッグしにくくなりますので。
その関数が正常に終了したかどうかをReturn命令で与えてやってメインの方でその数値で処理方式を変更してやるのが通常です。

投稿日時 - 2005-03-15 09:58:07

あなたにオススメの質問