一个返回的问题.请教个位大大......

MAOGE1987 2008-03-08 11:14:40
main 函数的返回值用于说明程序的退出状态。如果返回 0,则代表程序正常退出;返回其它数字的含义则由系统决定。
我想知道系统决定的情况有什么??问的不专业,还请指教下...谢谢.....
...全文
134 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
thecorr 2008-03-17
  • 打赏
  • 举报
回复
飈准
paidfighting 2008-03-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 arong1234 的回复:]
大家看起来都是“标准”主义啊,凡事都拿个标准说事。4楼尤其是崇拜牛人啊。不过再好的标准都要业界支持,目前的状况是:main的返回值实际上基本没在用,业界其实把他基本忽略了,在这种情况下,就不符合标准又怎么了?

我所知道的唯一用处,就是批处理文件中用过这个返回值。其他系统都不决定。但是这种唯一的情况你最好也遵守,一是遵守的代价低,不就一个返回值嘛?二是一旦谁想在批处理里用他,就有用了:)
[/Quote]

有一个标准,编译器,使用者都向标准逐渐看齐,这是好事,你说的“业界”是一种不稳定的东西,随时可能变,对于使用的人来说,非常的不方便。万一哪天业界的东西一变,所有的使用者都要跟着变。

至于标准中有的东西没有被支持,有很多历史的原因。但总体来说,这是一个好的目标

硬件上就有很多标准,比如为什么现在大家这么推崇usb。今天通用的很多硬件标准大都是一些大公司联合开发的,最早的时候几家公司分开定义,后来意识到这样不行。有一个标准并向之看齐,是处理这类问题的最好办法。

从使用者的角度,就应该向标准看齐,所谓的业界即使不能对标准支持的很好,但也不会违背标准来做事。但若我们总使用一种标准里没有的东西,等哪天业界终于改过来了,就被迫要改变。

没有标准,计算机的世界会乱的。。。。

MAOGE1987 2008-03-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 coding_hello 的回复:]
引用 7 楼 arong1234 的回复:
大家看起来都是“标准”主义啊,凡事都拿个标准说事。4楼尤其是崇拜牛人啊。不过再好的标准都要业界支持,目前的状况是:main的返回值实际上基本没在用,业界其实把他基本忽略了,在这种情况下,就不符合标准又怎么了?

我所知道的唯一用处,就是批处理文件中用过这个返回值。其他系统都不决定。但是这种唯一的情况你最好也遵守,一是遵守的代价低,不就一个返回值嘛?二是一旦谁想在批处理里…
[/Quote]
其实也是编译器的问题,在VC里void也可以,只不过不正规而已
星羽 2008-03-09
  • 打赏
  • 举报
回复
很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.( void main( ) 从来就不存在于 C++ 或者 C )。下面我分别说一下 C 和 C++ 标准中对 main 函数的定义。
“The C programming Language(《C 程序设计语言》)用的就是 main( )。”--- 这是因为第一版的C语言只有一种类型,那就是int,没有char,没有long,没有float,…………既然只有一种类型,那么就可以不写,后来的改进版为了兼容以前的代码于是规定:不明确标明返回值的,默认返回值为int,也就是说 main()等同于int main(),而不是等同于void main()。在C99中,标准要求编译器至少给 main() 这种用法来个警告。

1. C
在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language 2e(《C 程序设计语言第二版》)用的就是 main( )。不过在最新的 C99 标准中,只有以下两种定义方式是正确的:
int main( void )
int main( int argc, char *argv[] )
(参考资料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup)
当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成 char **argv;argv 和 argc 可以改成别的变量名(如 intval 和 charval),不过一定要符合变量的命名规则。
如果不需要从命令行中获取参数,请用int main(void) ;否则请用int main( int argc, char *argv[] ) 。
main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。
如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return 语句,虽然没有这个必要,但这是一个好的习惯。注意,vc6不会在目标文件中加入return 0; ,大概是因为 vc6 是 98 年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上 return 语句了吧!不过,gcc3.2(Linux 下的 C 编译器)会在生成的目标文件中加入 return 0; 。
2. C++
C++98 中定义了如下两种 main 函数的定义方式:
本文来自: 中国自学编程网(www.zxbc.cn) 详细出处参考:http://www.zxbc.cn/html/cjq/2613082728391.html


int main( )
int main( int argc, char *argv[] )
(参考资料:ISO/IEC 14882(1998-9-01)Programming languages — C++ 3.6 Start and termination)
int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的用法也和 C99 中定义的一样。同样,main 函数的返回值类型也必须是int。如果main函数的末尾没写return语句,C++98 规定编译器要自动在生成的目标文件中加入 return 0; 。同样,vc6 也不支持这个特性,但是 g++3.2(Linux 下的 C++ 编译器)支持。
3. 关于 void main
在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回值时可以把main函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main 可以通过编译(如 vc6),但并非所有编译器都支持 void main ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用 int main .
总而言之:
void main 主函数没有返回值
main 默认为int 型,即 int main(), 返回整数。
注意,新标准不允许使用默认返回值,即int不能省,而且对应main函数不再支持void型返回值,因此为了使程序有很好的移植性,强烈建议使用:
int main()
{
return 0; /* 新标准主函数的返回值这条语句可以省略 */
}
本文来自: 中国自学编程网(www.zxbc.cn) 详细出处参考:http://www.zxbc.cn/html/cjq/2613082728391_2.html?
野男孩 2008-03-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 arong1234 的回复:]
大家看起来都是“标准”主义啊,凡事都拿个标准说事。4楼尤其是崇拜牛人啊。不过再好的标准都要业界支持,目前的状况是:main的返回值实际上基本没在用,业界其实把他基本忽略了,在这种情况下,就不符合标准又怎么了?

我所知道的唯一用处,就是批处理文件中用过这个返回值。其他系统都不决定。但是这种唯一的情况你最好也遵守,一是遵守的代价低,不就一个返回值嘛?二是一旦谁想在批处理里用他,就有用了:)
[/Quote]

main如果不支持返回int,其他进程就无法获得其退出原因。标准这么规定自然是有他的道理的。
arong1234 2008-03-09
  • 打赏
  • 举报
回复
不要把名人的话当教条。他坚持因为他是C++之父,咱只是写代码的小工匠,只要遵循业界里有的即可
arong1234 2008-03-09
  • 打赏
  • 举报
回复
大家看起来都是“标准”主义啊,凡事都拿个标准说事。4楼尤其是崇拜牛人啊。不过再好的标准都要业界支持,目前的状况是:main的返回值实际上基本没在用,业界其实把他基本忽略了,在这种情况下,就不符合标准又怎么了?

我所知道的唯一用处,就是批处理文件中用过这个返回值。其他系统都不决定。但是这种唯一的情况你最好也遵守,一是遵守的代价低,不就一个返回值嘛?二是一旦谁想在批处理里用他,就有用了:)
野男孩 2008-03-09
  • 打赏
  • 举报
回复
C++标准是规定了main函数必须是返回int类型的。
cangwu_lee 2008-03-09
  • 打赏
  • 举报
回复

一兩句話,說太多無謂。

一個程序,如果獨立運行,返回值沒有什麼意義;被其它程序調用,返回值就是兩個程序之間的“通訊協議”。

至於是不是標準的問題,就根據開發環境而定了。

zeloas 2008-03-09
  • 打赏
  • 举报
回复
对main而言,0一般表示退出成功
反之其他数字一般表示出错或出现异常,具体用哪个数字表示什么问题,由设计者定
舉杯邀明月 2008-03-09
  • 打赏
  • 举报
回复
同意5楼的............
MAOGE1987 2008-03-09
  • 打赏
  • 举报
回复
谢谢大家的解答...
我只是想用来调用下而已...
LPF2015 2008-03-08
  • 打赏
  • 举报
回复
就是调用main函数的程序来确定,

可以在一个程序内调用另一个程序的main函数。

情况多了去了。

wsqshz 2008-03-08
  • 打赏
  • 举报
回复
自己规定非零数字代表的含义。你说的“返回其它数字的含义则由系统决定”,“系统”指的是系统设计者。
  • 打赏
  • 举报
回复
这个看系统解释,一般就有成功和失败.

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧