| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1118 人关注过本帖
标题:return0
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实仔细看《C++ Primer》第1章第2-3页就明白是怎么回事,该节最后一段话一语道破天机。

在大多数系统,main函数的返回值是一个状态指示器。返回值0往往表示main函数成功执行完毕。任何其他非零的返回值都有操作系统定义的含义。通常非零返回值表明有错误出现。每一种操作系统都有自己的方式告诉用户main函数返回什么内容。


蓝色的句子,“往往”,说明这是业界共识,大多数系统都是如此约定,但并非规定。是的,标准说应该有返回值,但并没说必须是什么值,正如红色的两句话所说,非零的错误代码,每种操作系统都有各自的解释,并非完全一样,也就是说,在甲系统是这样的含义,在乙系统中未必是这样,可能是另外的含义,甚至可能没有这样的预定义错误代码。所以,就算你让main函数返回值非零,在不同的操作系统中,对同一个错误,可能需要设定不同的返回值,如果不查操作系统的手册,获得这样的返回值也没用,除非你只使用自定义的返回代码自己解释。这样,除了大家都愿意遵守的零之外,没有共通之处,这个规定实际上是虚的——某些操作系统,你不显式写main函数的返回值,它也有默认的返回值,那就是零。本来main函数就是编译器在编译程序时写入一段启动代码调用的(入口函数可以在编译指令中指定main函数之外的函数,main也仅仅是一种约定),结尾也有擦屁股代码,那段代码自己有返回值,当检查到你没写main函数的返回值时,它自己返回零。

[ 本帖最后由 TonyDeng 于 2013-8-12 11:59 编辑 ]

授人以渔,不授人以鱼。
2013-08-12 11:42
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
= mov 0 eax + ret

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-08-12 11:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果真的出错了,你写不写返回值,程序也是错了,如果你出错了也返回零、或者返回不一致的错误码,也只能是误导操作系统(的后续操作)。防止程序出错,尽量在内部自行修复、优雅地结束,本来就是程序员的责任,出错了就简单地返回一个错误码了事(其实你如果已经能夠正确地返回错误码,就说明找到问题的根源,应该尝试修复,或写上相应的防护代码,而不是拍屁股走人,实在是程序自己无法解决的问题,才会返回给操作系统,那才是上头要解决的问题),是把责任往上推,领导要你这样的下属有什么用!C程序员不爱写保护代码,与这种思维有很大关系,最后做人也往往是这样子的。

[ 本帖最后由 TonyDeng 于 2013-8-12 12:13 编辑 ]

授人以渔,不授人以鱼。
2013-08-12 12:09
赵疯子
Rank: 8Rank: 8
来 自:dream
等 级:蝙蝠侠
威 望:2
帖 子:365
专家分:737
注 册:2013-5-5
收藏
得分:0 
《c primer plus》
大多数的编译器将对您的忽视提出警告,但仍将程序编译,但对于dos、unix而言,他有实际的用途
2013-08-12 13:59
快速回复:return0
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014250 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved