2013-04-20 37 views

回答

0

是的,這是一種很好的做法,但並不是絕對必要的,因爲如果您的進程將立即結束,因爲操作系統將在進程死亡時爲您清理所有內容。

2

沒有必要關閉一個打開的流,因爲所有打開的流在程序結束時都關閉,但最好每調用一次fopen就有一個fclose。在stderr的情況下,此流在啓動時已打開(您不必撥打fopen),因此即使發出一些freopen調用,我也沒有理由明確關閉它。

+0

一般來說,我會同意,除了標準的3流。看到我對phihag答案的評論。 – 2013-04-20 16:55:43

+0

@R。我沒有真正注意到這裏是'stderr'。其實我也不會關閉它。在程序中沒有關聯的'fopen'調用,所以即使有'freopen'調用,我也沒有理由爲'stderr'調用'fclose'。 – ouah 2013-04-20 18:13:43

2

當一個進程結束時,它的所有句柄都會自動關閉。但是,關閉您獲得的每個手柄的風格很好 - 例如,有人可能想將程序轉換爲庫,或者您可能正在尋找泄漏。無論您致電freopen並不重要。

但是,在stderr的情況下,情況有點不同。由於您沒有專門打開該流,因此您不應關閉它。它也很有可能被其他你不能控制的組件所使用,例如atexit函數或堆棧粉碎檢測。

+1

關閉任何標準文件(stdin/out/err)是一個相當糟糕的主意。在關閉文件流後,任何對文件流的使用都會導致未定義的行爲,並且有可能您不知道的代碼會在關閉它之後嘗試訪問這些文件(*尤其是* stderr) - 例如,一個庫已經註冊了一個'atexit'處理程序,並在清理代碼時遇到錯誤。 – 2013-04-20 16:55:10

0

當然。並且只需fclose(stderr);即可。