c++ - main() 中的 return 语句与 exit()

标签 c++ c coding-style return exit

我应该在 main() 中使用 exit() 还是只使用 return 语句?我个人喜欢 return 语句,因为我觉得它就像阅读任何其他函数一样,并且当我阅读代码时流控制很流畅(在我看来)。即使我想重构 main() 函数,使用 return 似乎比 exit() 更好。

exit() 会做任何 return 不会做的特殊事情吗?

最佳答案

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

当我在 main() 中调用 return 时,将为我的本地作用域对象调用析构函数。如果我调用 exit()将不会为我的本地范围对象调用任何析构函数!重新阅读。 exit() 不返回。这意味着,一旦我称它为,就“没有后盾”。您在该函数中创建的任何对象都不会被销毁。通常这没有任何影响,但有时确实如此,例如关闭文件(您确定要将所有数据刷新到磁盘吗?)。

请注意,即使您调用 exit()static 对象也会被清除。最后请注意,如果您使用 abort(),则不会销毁任何对象。也就是说,不会调用全局对象、静态对象和局部对象的析构函数。

选择退出而不是返回时要谨慎行事。

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

关于c++ - main() 中的 return 语句与 exit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/461449/

相关文章:

java - 有没有办法让 eclipse 报告一般的 "catch (Exception e)"作为错误/警告(在 java 中)?

java - 构造函数和 setter 中的验证字段是否被认为是错误的冗余代码?

c++ - 获取具体进程内存空间

c++将隐式转换从double更改为int

c++ - 为什么缓冲区溢出警告(C4789)仅在编译器标志/O2 时发生?

c - 在c中交换任何类型的两个变量

c++ - 与 NAN 的算术运算

c - 为什么从结构传递指针需要额外的取消引用?

c - 反转字符串列表顺序

c - 在链表程序中维护 'curr'(列表末尾)指针是个好主意吗?