免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xumouxin1
打印 上一主题 下一主题

exit()和return 有什么区别? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-12-05 13:52 |只看该作者
原来apue这么写:

  1. Returning an integer value from the main function is equivalent to calling exit with the same value. Thus
  2.     exit(0);
  3. is the same as
  4.     return(0);
  5. from the main function.
复制代码


所以大家就断章取义了,
可见某些人对权威的膜拜已经到了盲目的地步

论坛徽章:
0
12 [报告]
发表于 2006-12-05 14:03 |只看该作者
应该不是这一段,再找找

论坛徽章:
0
13 [报告]
发表于 2006-12-05 14:04 |只看该作者
原帖由 isjfk 于 2006-12-5 14:03 发表
应该不是这一段,再找找


兄弟不用客气啦,直接贴段上来好了:em12::em12:

论坛徽章:
0
14 [报告]
发表于 2006-12-05 14:12 |只看该作者
其实"mik"和"飞灰橙"说的都对, 只不过是从不同的角度来说的.
"mik"是从功能和作用上来说的, 其实从作用上来说return(0)确实等同于exit(0), 把main的后续工作(如: 刷新流,释放一些没有被程序释放的内存空间等等)交给exit处理.

而"飞灰橙"是从程序执行的过程来说的, 它们的过程确实不一样. 如果用return相当于exit调用main; 而用exit的话,相当于main调用exit, 所以从过程来看确实有区别.

[ 本帖最后由 LF_532 于 2006-12-5 14:18 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2006-12-05 14:14 |只看该作者
原帖由 飞灰橙 于 2006-12-5 14:04 发表


兄弟不用客气啦,直接贴段上来好了:em12::em12:

书不在我手边呀

论坛徽章:
0
16 [报告]
发表于 2006-12-05 14:21 |只看该作者
原帖由 isjfk 于 2006-12-5 14:14 发表

书不在我手边呀


那不用找了,你也一并教育一下:em11:
用代码说话,没什么好争得
把exit(0)改成return 0, 看效果.

  1. #include <cstdio>
  2. #include <cstdlib>


  3. struct T
  4. {
  5.     T ()
  6.     {
  7.         printf ("1\n");
  8.     }
  9.     ~T ()
  10.     {
  11.         printf ("2\n");
  12.     }
  13. };


  14. int main()
  15. {
  16.     T t;
  17.     //return 0;
  18.     exit (0);
  19. }

复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2006-12-05 14:23 |只看该作者
原帖由 飞灰橙 于 2006-12-5 14:21 发表


那不用找了,你也一并教育一下:em11:
用代码说话,没什么好争得
把exit(0)改成return 0, 看效果.
[code]
#include <cstdio>
#include <cstdlib>


struct T
{
    T ()
    {
...

西加加……

论坛徽章:
0
18 [报告]
发表于 2006-12-05 14:26 |只看该作者
原帖由 flw 于 2006-12-5 14:23 发表

西加加……



难道C和C++在这点上不一样吗?

论坛徽章:
0
19 [报告]
发表于 2006-12-05 14:44 |只看该作者
不一样,C++要复杂得多。至于在 C 里面从 main() 里 return 或者 exit() 有没有区别我记不清了,APUE 里面确实有一节讲得很清楚。

论坛徽章:
0
20 [报告]
发表于 2006-12-05 14:49 |只看该作者
原帖由 isjfk 于 2006-12-5 14:44 发表
不一样,C++要复杂得多。至于在 C 里面从 main() 里 return 或者 exit() 有没有区别我记不清了,APUE 里面确实有一节讲得很清楚。

C还是拿代码说话吧:
以下代码,在我的linux上测试,如果用exit (0), 会显示tom
用return 0, 会显示jerry

  1. #include <stdio.h>
  2. #include <stdlib.h>


  3. int a, b;

  4. void test ()
  5. {
  6.     int volatile n;
  7.     b = (int) &n;

  8.     if (a >= b)
  9.         printf ("tom\n");
  10.     else
  11.         printf ("jerry\n");
  12. }

  13. int main()
  14. {
  15.     int volatile n[1048*20];
  16.     a = (int) &n;
  17.     atexit (test);
  18.     //return 0;
  19.     exit (0);
  20. }
复制代码

[ 本帖最后由 飞灰橙 于 2006-12-5 14:50 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP