freopen(file_name, open_mode, stderr) のような呼び出しの後、プロセスが終了する前に fclose(stderr) を呼び出す必要がありますか? 事前に感謝し、私の英語で申し訳ありません
4 に答える
開いているすべてのストリームはプログラムの終了時に閉じられるため、開いているストリームを閉じる必要はありませんが、fclose
for everyfopen
呼び出しを行うことをお勧めします。ここの場合stderr
、このストリームは起動時に既に開いている ( を呼び出す必要はありませんでした) ため、いくつかの呼び出しが発行されたfopen
としても明示的に閉じる理由はありません。freopen
プロセスが終了すると、すべてのハンドルが自動的に閉じられます。ただし、取得したすべてのハンドルを閉じるのは良いスタイルです。たとえば、誰かがあなたのプログラムをライブラリに変換したい場合や、リークを探している場合があります。あなたが電話するかどうかfreopen
は問題ではありません。
ただし、stderr の場合は少し状況が異なります。そのストリームを具体的に開いていないので、閉じないでください。また、atexit 関数やスタック破壊検出など、制御できない他のコンポーネントによって使用される可能性も非常に高くなります。
はい、それは良い習慣ですが、プロセスが終了すると OS がすべてをクリーンアップするため、プロセスがすぐに終了する場合は厳密には必要ありません。
もちろん。そして、単にfclose(stderr);
行います。