
No.3ベストアンサー
- 回答日時:
ANSI規格では、mainの中で使う限りにおいては、returnとexitに関しては違いがありません。
関数の中で使った場合、returnはその関数を呼び出した関数に対して値を返すのに対し、exitはそのプログラムを呼び出した他のプログラム(OSや他のプロセス、サービスなど)に対して値を返します。
これらを念頭において使い分ければいいと思います。
私の場合は、exitはmainと各関数でプログラムの仕様上エラーに対処できない場合にプログラムを強制終了したい場所で使います。
それ以外の場所ではreturnを使います。
この回答への補足
とても分かりやすかったです、ありがとうございます。
エラー処理の仕方によって使い分けたらよいということでしょうか?
余談ですが、皆様親切で優劣がつけ難く困ってしまいます、感謝します。もう暫く回答を募らせて頂いて質問を閉じさせて頂くつもりです。
No.5
- 回答日時:
私の場合、main以外の下位関数では、次のように場合わけして組んでいます。
1.エラーで強制終了が必要な場合exitでエラーコードを返してプログラムを終了
2.エラーがその関数内で修復可能であればreturnで正常終了のコードを返す
3.その関数内でエラー処理できないが、呼び出しもとの関数でエラー処理できれば、returnでエラーに対応したエラーコードを返し、上位の関数でエラー処理をする
なるほど、やはりできる限り上位の関数に処理を戻した方がいいということでしょうか。 なかなか本には載っていない価値のあるアドバイスを頂けてうれしいです。
ありがとうございました。
No.4
- 回答日時:
> newで生成したものはexitで終了するとどうなるのでしょうか?
どうにもなりません。これはmain関数からreturnした場合でも同じです。
newで生成したものは、プログラマの責任でdeleteする必要があります。
No.2
- 回答日時:
bool型を使うとのことなのでC++だと判断します。
(C99の可能性もありますが...)exit関数でプログラムを終了させると、自動記憶域に生成したインスタンスのデストラクタが呼ばれません。デストラクタで行っている処理によっては、かなり深刻な不具合になる可能性があります。
できれば例外をスローして、main関数でreturnする方が安全です。
この回答への補足
なるほどデストラクタの件大変参考になりました。
的が外れていたらすみませんが、newで生成したものはexitで終了するとどうなるのでしょうか?
WM_DESTROY等で明示的にdeleteしないとどうなるのでしょうか?
No.1
- 回答日時:
サブルーチン内にEXIT命令を入れるのは避けるべきです。
非常にデバッグしにくくなりますので。
その関数が正常に終了したかどうかをReturn命令で与えてやってメインの方でその数値で処理方式を変更してやるのが通常です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# 競技プログラミングに関する質問です。 3 2022/04/03 19:51
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- UNIX・Linux bash環境でのエラー対応をお願い致します。 1 2022/11/26 17:41
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
UserForm1.Showでエラーになり...
-
【VBA】ワークブックを開く時に...
-
「実行時エラー '3167' レコー...
-
インポート時のエラー「データ...
-
【VBAエラー】Nextに対するFor...
-
マクロOn Error GoTo ErrLabel...
-
String""から型'Double'への変...
-
マクロで"#N/A"のエラー行を削...
-
JAVA Jasper Report でのQRコー...
-
実行時エラー'-2147467259(8000...
-
Nullの使い方が不正ですのエラ...
-
教えてください。FTPアップロー...
-
VBA データ(特定値)のある最...
-
ACCESS フォームから開...
-
F9キーを実行するVBスクリ...
-
VB.net 重複チェックがしたいです
-
Excel2000でデータフォームを自...
-
OpenOffice Basicで簡単な関数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
String""から型'Double'への変...
-
【VBA】ワークブックを開く時に...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
ApplicationとWorksheetFunctio...
-
【Access】Excelインポート時に...
-
インポート時のエラー「データ...
-
実行時エラー 438 の解決策をお...
-
オブジェクト型の変数にフォー...
-
.VBSだとADODBのプロバイダが見...
-
実行時エラー'-2147467259(8000...
-
【VB.NET】 パワポ操作を非表示で
-
フランスの生年月日(jj/mm/aaaa)
-
【VBAエラー】Nextに対するFor...
おすすめ情報