C++ での exit() の正しい使い方は? 質問する

C++ での exit() の正しい使い方は? 質問する

データ ファイルを読み取り、テキストを解析し、そのデータに対して何らかの処理を行う簡単なアプリケーションを作成しました。データ ファイルは main() 関数で開かれます。ファイルが正しく開かれなかったと判断された場合、exit() 関数を使用するのは適切なプログラミング方法でしょうか? 例:

if (!file.is_open() ){
     exit(1);
}

さらに、私のプログラムには、ファイル内のデータを解析する別の関数があります。この関数は main() によって呼び出されます。関数がデータにエラーを見つけた場合、エラー メッセージを出力した後、プログラムを停止します。このような状況では、解析関数内で exit() 関数を使用しても問題ありませんか? この質問をしているのは、main() 関数に制御を戻さずに関数が単独でプログラムを終了できるようにするのは、あまり整然としていないように思われるからです。(この質問がかなり明白に思われる場合はお詫びします。私は C++ とプログラミング全般の初心者です)。

ベストアンサー1

関数からの呼び出しはexit、動作が明確に定義されているという意味では「悪い」ことではありません。そうすることで根本的に間違ったことは何もありません。

しかし、たとえばライブラリに配置される可能性のある関数を記述している場合、exitそこからの呼び出しは一般に悪い習慣です。呼び出しコードにエラーを通知し (たとえば、特定の戻り値または例外を介して)、呼び出しコードに処理を決定させる方がはるかに適切です。 (ただし、完全に有効な場合もあります。たとえば、 という関数を記述している場合quit_if_file_not_found、ユーザーは終了を期待しています。)

あなたの場合、解析関数はおそらく を呼び出すべきではexitありません。たとえば、将来のある時点で、最初のファイル名の解析が失敗した場合に、メイン コードでユーザーに別のファイル名を要求するようにしたい場合があります。解析ルーチンがプログラムを終了する場合は、メイン コードとその関数の両方を変更する必要があります。エラー状態を通知した場合は、 のロジックを変更するだけで済みますmain

(そして、エラー メッセージを印刷したり、上記のように何かをログに記録したりしないでくださいexit。そうすると、コードで発生した問題を解決する方法がわからず、ユーザーはイライラすることになります。)

おすすめ記事