关于exit() 和 return ()

exit把控制权交给系统,而return将控制权交给调用函数。

exit()有返回值的,不过返回值传递给操作系统或者说运行环境。 
exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。 
main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile ()创建的临时文件。 

c++ primer第四版中文版 216页最下方有一句话 
“主函数main不能调用自身” 
但以下程序可以编译成功。
int main(int argc, char** argv) { 
   if(argc==0) 
     return 0; 
     //exit(0);
   else { 

     int rv; 
     rv=main(argc-1, argv); 
     printf("%s\n",argv[argc-1]); 
     return rv; 
   } 
分别将第三行代码换成return 0; 或 exit(0);  从这里面可以看出,使用exit程序直接退出,不能继续执行,而如果用return的话,main函数是作为一个普通的函数进行递归调用的。
     由此,我认为文章开头的句红字是正确的,而以下的一些内容,是我在网上各处搜集,别人的一些解释,留作对比。

要区分c和c++,c++中的main函数不可以递归调用,但是c可以 

在C++中 main函数中的exit和return并不完全一样,比如下面代码 
  
#include <iostream> 
class A 

public: 
     A(){ std::cout << "A constructed\n"; } 
     ~A(){ std::cout << "A destructed\n"; } 
}; 
  
int main() 

     A a; 
     //return 0; 
     exit(0); 

如果用exit,那么main函数中的对象a将没有析构,而用return返回,a将被正常析构 
当没有exit(0)时,return 0时,系统会输出并清理缓冲区并关闭标准输入cin、标准输出cout、标准错误cerr、标准日志clog。

当有exit(0)时,c函数会输出并清理stdin, stdout,现在stdout已经被关闭了,在执行return 0时,cout的缓冲区的数据已经没有写入的目标了,所以无输出。

这只能说明cout和stdout, cin 和stdin用的是不同的缓冲区。
为什么用return 0 的时候对象b能自动调用析构函数,完全是编译器干的。
在c main函数中exit和return是相同的;而在c++中,编译器会将类析构函数的汇编代码插入到return前面,但对exit不作任何变动。
    C++ 中要尽量避免使用exit。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值