其实仔细看《C++ Primer》第1章第2-3页就明白是怎么回事,该节最后一段话一语道破天机。
蓝色的句子,“往往”,说明这是业界共识,大多数系统都是如此约定,但并非规定。是的,标准说应该有返回值,但并没说必须是什么值,正如红色的两句话所说,非零的错误代码,每种操作系统都有各自的解释,并非完全一样,也就是说,在甲系统是这样的含义,在乙系统中未必是这样,可能是另外的含义,甚至可能没有这样的预定义错误代码。所以,就算你让main函数返回值非零,在不同的操作系统中,对同一个错误,可能需要设定不同的返回值,如果不查操作系统的手册,获得这样的返回值也没用,除非你只使用自定义的返回代码自己解释。这样,除了大家都愿意遵守的零之外,没有共通之处,这个规定实际上是虚的——某些操作系统,你不显式写main函数的返回值,它也有默认的返回值,那就是零。本来main函数就是编译器在编译程序时写入一段启动代码调用的(入口函数可以在编译指令中指定main函数之外的函数,main也仅仅是一种约定),结尾也有擦屁股代码,那段代码自己有返回值,当检查到你没写main函数的返回值时,它自己返回零。
[ 本帖最后由 TonyDeng 于 2013-8-12 11:59 编辑 ]
在大多数系统,main函数的返回值是一个状态指示器。返回值0往往表示main函数成功执行完毕。任何其他非零的返回值都有操作系统定义的含义。通常非零返回值表明有错误出现。每一种操作系统都有自己的方式告诉用户main函数返回什么内容。
蓝色的句子,“往往”,说明这是业界共识,大多数系统都是如此约定,但并非规定。是的,标准说应该有返回值,但并没说必须是什么值,正如红色的两句话所说,非零的错误代码,每种操作系统都有各自的解释,并非完全一样,也就是说,在甲系统是这样的含义,在乙系统中未必是这样,可能是另外的含义,甚至可能没有这样的预定义错误代码。所以,就算你让main函数返回值非零,在不同的操作系统中,对同一个错误,可能需要设定不同的返回值,如果不查操作系统的手册,获得这样的返回值也没用,除非你只使用自定义的返回代码自己解释。这样,除了大家都愿意遵守的零之外,没有共通之处,这个规定实际上是虚的——某些操作系统,你不显式写main函数的返回值,它也有默认的返回值,那就是零。本来main函数就是编译器在编译程序时写入一段启动代码调用的(入口函数可以在编译指令中指定main函数之外的函数,main也仅仅是一种约定),结尾也有擦屁股代码,那段代码自己有返回值,当检查到你没写main函数的返回值时,它自己返回零。
[ 本帖最后由 TonyDeng 于 2013-8-12 11:59 编辑 ]
授人以渔,不授人以鱼。