3

freopen(file_name, open_mode, stderr) のような呼び出しの後、プロセスが終了する前に fclose(stderr) を呼び出す必要がありますか? 事前に感謝し、私の英語で申し訳ありません

4

4 に答える 4

2

開いているすべてのストリームはプログラムの終了時に閉じられるため、開いているストリームを閉じる必要はありませんが、fclosefor everyfopen呼び出しを行うことをお勧めします。ここの場合stderr、このストリームは起動時に既に開いている ( を呼び出す必要はありませんでした) ため、いくつかの呼び出しが発行されたfopenとしても明示的に閉じる理由はありません。freopen

于 2013-04-20T16:44:56.473 に答える
2

プロセスが終了すると、すべてのハンドルが自動的に閉じられます。ただし、取得したすべてのハンドルを閉じるのは良いスタイルです。たとえば、誰かがあなたのプログラムをライブラリに変換したい場合や、リークを探している場合があります。あなたが電話するかどうかfreopenは問題ではありません。

ただし、stderr の場合は少し状況が異なります。そのストリームを具体的に開いていないので、閉じないでください。また、atexit 関数やスタック破壊検出など、制御できない他のコンポーネントによって使用される可能性も非常に高くなります。

于 2013-04-20T16:45:32.507 に答える
0

はい、それは良い習慣ですが、プロセスが終了すると OS がすべてをクリーンアップするため、プロセスがすぐに終了する場合は厳密には必要ありません。

于 2013-04-20T16:44:31.410 に答える
0

もちろん。そして、単にfclose(stderr);行います。

于 2013-04-20T16:45:33.460 に答える