2013-04-20 235 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);即可。