我知道两者之间的差异。一个值得注意的事情是abort()发送SIGABRT信号,因此当您的软件依赖它们时它可能是相关的。但是对于一个典型的应用程序exit()似乎是更安全的abort()版本......?是否还有其他问题需要使用abort()而不是exit()?
答案 0 :(得分:33)
如果用户启用了核心转储,则使用abort
将转储核心。因此,根据经验,我会使用abort
,如果你不确定出了什么问题,获取有用信息的唯一方法就是分析核心转储。
如果您可以从任何给定点安全地exit
,并且不需要核心转储,那么退出是一种更好的方法。
答案 1 :(得分:20)
如果您的程序处于可能损坏的状态,请使用abort()
并且您认为尝试进一步执行任何操作都太危险了。 exit()
将导致任何atexit
函数以及静态对象的C ++析构函数被调用。这通常是干净退出所需要的,但如果它们覆盖了包含损坏数据的文件,则可能是灾难性的。
答案 2 :(得分:8)
有时你的程序会破坏到其状态变得不一致的程度,因此exit()
将无效,因为它会导致全局对象破坏,而后者在状态不一致时将无法正常运行。在这种情况下,abort()
是首选。
答案 3 :(得分:1)
当应用程序无法处理异常并且无法理解要执行的操作时,Abort会被优先使用。 Exit()意味着应用程序必须优雅地完成所有任务。如果发生异常且应用程序能够处理相同的事件,则会发生Exit()调用。