为了账号安全,请及时绑定邮箱和手机立即绑定

main()中的return语句vs exit()

/ 猿问

main()中的return语句vs exit()

C++ C
慕姐4208626 2019-08-14 17:22:56

main()中的return语句vs exit()

我应该使用exit()还是只是return声明main()?我个人赞成这些return陈述,因为我觉得这就像在阅读代码时读取任何其他功能和流量控制一样顺畅(在我看来)。即使我想重构main()函数,return看起来似乎是一个更好的选择exit()

做一些exit()不特别的事return吗?


查看完整描述

3 回答

?
波斯汪

其实,有 有差别,但它是微妙的。它对C ++有更多的影响,但差异很重要。

当我调用returnmain(),将为我的本地范围对象调用析构函数。如果我调用exit()将不会为我的本地范围对象调用析构函数!重新阅读。exit() 不回来。这意味着,一旦我称之为“没有后援”。您在该函数中创建的任何对象都不会被销毁。通常这没有任何影响,但有时它会像关闭文件一样(当然你希望所有数据都刷新到磁盘?)。

请注意,static即使您打电话,也会清理对象exit()。最后请注意,如果您使用abort(),则不会销毁任何对象。也就是说,没有全局对象,没有静态对象,也没有本地对象会调用它们的析构函数。

在支持退出退货时谨慎行事。

http://groups.google.com/group/gnu.gcc.help/msg/8348c50030cfd15a


查看完整回答
反对 回复 2019-08-14
?
茅侃侃

另一个区别 exit是:标准库函数,因此您需要包含标题并与标准库链接。为了说明(在C ++中),这是一个有效的程序:

int main() { return 0; }

但要使用exit你需要一个包括:

#include <stdlib.h>int main() { exit(EXIT_SUCCESS); }

另外,这增加了一个额外的假设:调用exit来自main返回零具有相同的副作用。正如其他人所指出的,这取决于你正在构建什么样的可执行文件(即谁在调用main)。您在编写使用C运行时的应用程序吗?Maya插件?一个Windows服务?一个司机?每个案例都需要研究,看看是否exit相当于return。恕我直言,exit当你真正意味着 return只是使代码更混乱。OTOH,如果你真的 有意思,那么一定exit要用它。


查看完整回答
反对 回复 2019-08-14
?
墨色风雨

至少有一个理由需要exit:如果您的任何atexit处理程序引用自动存储持续时间数据main,或者您使用setvbufsetbuf分配给其中一个标准流,则自动存储持续时间缓冲区main,然后从main产生返回未定义的行为,但调用exit有效。

另一个潜在的用法(通常保留给玩具程序)是从具有递归调用的程序退出main


查看完整回答
反对 回复 2019-08-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信