主题:新手问题;return值有何作用
v12r45
[专家分:0] 发布于 2007-10-23 20:49:00
#include <iostream>
int main()
{
using namespace std;
int carrots;
carrots = 25;
cout << "I have";
cout << carrots;
cout << " carrots.";
cout << endl;
carrots = carrots - 1;
cout << "Crunch,crunch.Now I have" << carrots << "carrots." << endl;
return 0;
这段貌似有没return 0都能运行.那个0又有什么用,换100我也没看出变化
回复列表 (共13个回复)
沙发
U.S.S.R [专家分:1110] 发布于 2007-10-23 21:00:00
呵呵~
按照绝大部分编程者的说法,在main方法里,这个return的值,是“极其重要”的。
就你说的情况来讲,如果不写
return 0;
运行时也会默认返回0的。所以程序同样可以运行~
main方法返回值有什么用呢?理论上是向系统返回一些信息。
不过从实际运行情况来看……怎么说呢。冒昧的认为,没有必要无端鄙视写出
void main()
的人。……
板凳
huar321 [专家分:30] 发布于 2007-10-23 22:21:00
这是c++的标准用法,而c里就不要这个返回值,在c++中如果程序正常运行就返回一个零,当 没有正常运行是就返回一个非零值,一般为 -1。
在 c 里常把main定义为 void 类型,c++中就定义为 int。[em2][em2][em2]
这是我的一些看法,有问题请多指教。联系:huar321@163.com
3 楼
liangdong007 [专家分:2840] 发布于 2007-10-23 22:30:00
这个零是给操作系统看的(别忘了你的程序在操作系统上面运行)。
当返回0时,操作系统认为程序正常结束。
4 楼
wenming3166 [专家分:350] 发布于 2007-10-23 23:16:00
在WINDOWS和单片机下,系统检测代码执行的成功与否,
在最后面加上个 RETURN 0,往往表示操作成功......
请问如果没有返回值,,系统拿什么东西来检测代码运行成功?
这样做实际上增强了安全性.
5 楼
tianyuan006 [专家分:3150] 发布于 2007-10-24 00:08:00
[quote]这是c++的标准用法,而c里就不要这个返回值,在c++中如果程序正常运行就返回一个零,当 没有正常运行是就返回一个非零值,一般为 -1。
在 c 里常把main定义为 void 类型,c++中就定义为 int。[em2][em2][em2]
这是我的一些看法,有问题请多指教。联系:huar321@163.com[/quote]
这个是错误的说法
1.现在的标准 C 语言里面也不允许定义 void main() 的( 8 年以前就明令淘汰了 void main() 这种写法).
2.这个返回值可以给系统, 也可以给父进程. 举例来说, 比如 父进程创建了一个子进程以完成某项任务, 那么父进程常常需要知道子进程退出时的任务完成情况,这个时候这个返回值就有很重要的意义了.在这个意义下,不管是 C 还是 C++,返回值都是必要的.
3.操作系统是由一个个程序组装起来的,它们之间的关系也常常呈现父子进程的关系,而且常常需要这个返回值来确定下一步动作.
6 楼
rickone [专家分:15390] 发布于 2007-10-24 11:52:00
有点怀疑楼上的说法,进程间通信多用文件的方法,而不是靠一个返回值这么简单,因为进程在实际内存中是变动的,而且变量在虚拟内存上是隔离的,如果用寄存器,进程多起来也是不够的。个人觉得这个return 0只是标准,只是教条,遵守就行了。
7 楼
tianyuan006 [专家分:3150] 发布于 2007-10-24 15:08:00
[quote]有点怀疑楼上的说法,进程间通信多用文件的方法,而不是靠一个返回值这么简单,因为进程在实际内存中是变动的,而且变量在虚拟内存上是隔离的,如果用寄存器,进程多起来也是不够的。个人觉得这个return 0只是标准,只是教条,遵守就行了。[/quote]
说个 WIN32 API 你就明白了
BOOL GetExitCodeProcess(
HANDLE hProcess, // handle to the process
LPDWORD lpExitCode // address to receive termination status
);
这个东西就是为了获得那个 return 值的, 这个函数还可以判定子进程是否还在运行.
子进程正常退出当然有机会把各种消息告诉父进程,但是子进程如果是非正常退出的话就
未必有机会把各种消息告诉父进程了.但这个 API 函数无论如何都有效.而且退出码在很多时候还表示附加的信息.
这只是 WINDOWS 平台上的一个例子. 操作平台那么多, 消息机制也互不相同,非正常退出时是否还有机会发送消息是和平台有关的.但是, 通过这个退出码来传递信息这个途径和平台无关.
8 楼
huar321 [专家分:30] 发布于 2007-10-26 21:30:00
[quote][quote]这是c++的标准用法,而c里就不要这个返回值,在c++中如果程序正常运行就返回一个零,当 没有正常运行是就返回一个非零值,一般为 -1。
在 c 里常把main定义为 void 类型,c++中就定义为 int。[em2][em2][em2]
这是我的一些看法,有问题请多指教。联系:huar321@163.com[/quote]
这个是错误的说法
1.现在的标准 C 语言里面也不允许定义 void main() 的( 8 年以前就明令淘汰了 void main() 这种写法).
2.这个返回值可以给系统, 也可以给父进程. 举例来说, 比如 父进程创建了一个子进程以完成某项任务, 那么父进程常常需要知道子进程退出时的任务完成情况,这个时候这个返回值就有很重要的意义了.在这个意义下,不管是 C 还是 C++,返回值都是必要的.
3.操作系统是由一个个程序组装起来的,它们之间的关系也常常呈现父子进程的关系,而且常常需要这个返回值来确定下一步动作.[/quote]
可是在这几年的ncre的考试中c上机题也是用的void main()啊
9 楼
MasterRaySoul [专家分:2830] 发布于 2007-10-26 21:48:00
return 可以返回值,让你少用一个变量.
一般,程序返回0代表正常退出,反之则以常退出,Windows下可以用GetExitCodeProcess得到程序返回值
10 楼
MasterRaySoul [专家分:2830] 发布于 2007-10-26 21:58:00
void main()已经被C99“抛弃”了,像vc还算认得void main,但g++之类已经不支持了void main()了,尽量用标准、规范一点
我来回复