c – 为什么使用exit()被认为是坏的?

c – 为什么使用exit()被认为是坏的?,第1张

概述参见英文答案 > How to end C++ code                                    14个 我正在阅读 this question并且有一个答案可以解释为什么使用exit()是错误的,因为: >您最终会从程序中获得多个退出点 >它使代码更复杂(比如使用goto) >它无法释放在运行时分配的内存 我应该澄清我正在使用Qt,所以代码已经有点“复杂”,因为我正 参见英文答案 > How to end C++ code14个
我正在阅读 this question并且有一个答案可以解释为什么使用exit()是错误的,因为:

>您最终会从程序中获得多个退出点
>它使代码更复杂(比如使用goto)
>它无法释放在运行时分配的内存

我应该澄清我正在使用Qt,所以代码已经有点“复杂”,因为我正在利用信号和插槽.话虽这么说,对于问题#1,我看到它与#2有关,但我的代码目前试图避免使用exit(),因为我被告知它会让我的代码看起来像一团糟,但避免退出使它成为一个一塌糊涂.我有一些功能,不需要返回任何东西,返回东西.例如,当我有用户注册并且他们的用户名已经存在时,而不是在告知用户注册失败后(在这种情况下这是期望的行为)之后调用exit(),我将false返回给一个函数,然后该函数返回false给另一个函数然后返回false给我的main然后检查该函数是返回true还是false,如果它返回false则返回0.这样就避免了exit()使代码干净.

对于第三个问题,不使用exit(0)告诉 *** 作系统该程序是否已完成运行并且 *** 作系统将自行释放该内存?我运行了一个使用exit(0)的测试用例,当我按下一个按钮并从进程列表中删除进程并释放内存时,为什么这甚至是一个问题呢?这似乎是一个彻头彻尾的错误陈述,至少在windows上.

解决方法 只是盲目地在程序中的某个地方调用exit()被认为是不好的,原因很简单:

它没有正确关闭其他线程(它们刚刚被终止),它没有正确刷新所有缓冲区(stdio文件被刷新)并保证永久/共享资源的一致和有效状态(文件/共享内存/其他通信方式) .

尽管如此,如果你可以保证没有正在运行的线程可能会干扰(通过被锁等等),并且所有需要它的缓冲区都将被exit()刷新,这是实现更快关闭的有效方法.

许多现代软件都经过编程,可以更快地关闭:

它是容易崩溃的,因为几乎每次都只能使用例如关闭它来关闭. _Exit()(甚至不调用atexit或at_quick_exit注册的钩子)都可以.在大多数情况下,这比有序关闭快得多(如果可能,应首先销毁windows用户界面资源,因为它们是例外).

进一步阅读:Crash-only software (PDF!)

Crash-only programs crash safely and recover quickly. There is only one way to stop such software – by crashing it – and only one way to bring it up – by initiating recovery. Crash-only systems are built from crash-only components,and the use of transparent component-level retrIEs hIDes intra-system component crashes from end users. In this paper we advocate a crash-only design for Internet systems,showing that it can lead to more reliable,predictable code and faster,more effective recovery. We present IDeas on how to build such crash-only Internet services,taking successful techniques to their logical extreme.

总结

以上是内存溢出为你收集整理的c – 为什么使用exit()被认为是坏的?全部内容,希望文章能够帮你解决c – 为什么使用exit()被认为是坏的?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1255922.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存