• ベストアンサー

exitとreturnの使い分け

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

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

  • ベストアンサー
  • drmoreau
  • ベストアンサー率41% (33/79)
回答No.3

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

yruri
質問者

補足

とても分かりやすかったです、ありがとうございます。 エラー処理の仕方によって使い分けたらよいということでしょうか? 余談ですが、皆様親切で優劣がつけ難く困ってしまいます、感謝します。もう暫く回答を募らせて頂いて質問を閉じさせて頂くつもりです。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • drmoreau
  • ベストアンサー率41% (33/79)
回答No.5

私の場合、main以外の下位関数では、次のように場合わけして組んでいます。 1.エラーで強制終了が必要な場合exitでエラーコードを返してプログラムを終了 2.エラーがその関数内で修復可能であればreturnで正常終了のコードを返す 3.その関数内でエラー処理できないが、呼び出しもとの関数でエラー処理できれば、returnでエラーに対応したエラーコードを返し、上位の関数でエラー処理をする

yruri
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

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

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

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

yruri
質問者

補足

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

すると、全ての回答が全文表示されます。
  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

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

すると、全ての回答が全文表示されます。

関連するQ&A