「教えて!ピックアップ」リリース!

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

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

A 回答 (5件)

ANSI規格では、mainの中で使う限りにおいては、returnとexitに関しては違いがありません。


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

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

この回答への補足

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

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

補足日時:2005/03/15 11:16
    • good
    • 0

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



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

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

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

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

お礼日時:2005/03/16 11:08

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



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

bool型を使うとのことなのでC++だと判断します。

(C99の可能性もありますが...)

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

この回答への補足

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

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

補足日時:2005/03/15 11:04
    • good
    • 0

サブルーチン内にEXIT命令を入れるのは避けるべきです。


非常にデバッグしにくくなりますので。
その関数が正常に終了したかどうかをReturn命令で与えてやってメインの方でその数値で処理方式を変更してやるのが通常です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


人気Q&Aランキング