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

exit()做了return做不到的特殊事情吗?

推荐答案

实际上,有is个不同之处,但很微妙.它对C++有更多的含义,但差异很重要.

当我在main()中调用return时,将为本地作用域对象调用析构函数.如果我拨打exit()no destructor will be called for my locally scoped objects!,请重新阅读.exit() does not return. 这意味着,一旦我称之为"没有后座"在该函数中创建的任何对象都不会被销毁.这通常没有什么影响,但有时会有影响,比如关闭文件(当然你想将所有数据刷新到磁盘上?).

请注意,即使您呼叫exit(),也会清除static个对象.最后请注意,如果使用abort(),则不会销毁任何对象.也就是说,不会调用全局对象、静电对象和本地对象的析构函数.

Proceed with caution when favoring exit over return.

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

C++相关问答推荐

如何在Scilab API中求解方程

Zig将std.os.argv转换为C类型argv

为什么这个C程序代码会产生以下结果?

使用单个字节内的位字段

特定闪存扇区的内存别名

SDL 2.0-从数组渲染纹理

如果我释放其他内容,返回值就会出错

在C中将通用字符名称转换为UTF-8

如何在c++中包装返回空*的函数

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

错误:包含文件时类型名称未知

如何在C++中处理按键

致命错误:ASM/rwan ce.h:没有这样的文件或目录.符号链接还不够

如何用C语言为CLI应用程序编写按键检测系统?

条件跳转或移动取决于未初始化值(S)/未初始化值由堆分配创建(Realloc)

从整型转换为浮点型可能会改变其值.

为什么会出现此错误?二进制表达式的操作数无效

C中的char**v*char[]

程序打印一些随机空行

使用复合文字数组初始化的指针数组