回 帖 发 新 帖 刷新版面

主题:新手问题;return值有何作用

#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个回复)

沙发

呵呵~
按照绝大部分编程者的说法,在main方法里,这个return的值,是“极其重要”的。
就你说的情况来讲,如果不写
return 0;
运行时也会默认返回0的。所以程序同样可以运行~

main方法返回值有什么用呢?理论上是向系统返回一些信息。
不过从实际运行情况来看……怎么说呢。冒昧的认为,没有必要无端鄙视写出
void main()
的人。……

板凳

这是c++的标准用法,而c里就不要这个返回值,在c++中如果程序正常运行就返回一个零,当 没有正常运行是就返回一个非零值,一般为 -1。
    在 c 里常把main定义为 void 类型,c++中就定义为 int。[em2][em2][em2]
    这是我的一些看法,有问题请多指教。联系:huar321@163.com

3 楼

这个零是给操作系统看的(别忘了你的程序在操作系统上面运行)。
当返回0时,操作系统认为程序正常结束。

4 楼



在WINDOWS和单片机下,系统检测代码执行的成功与否,

在最后面加上个 RETURN 0,往往表示操作成功......

请问如果没有返回值,,系统拿什么东西来检测代码运行成功?

这样做实际上增强了安全性.

5 楼

[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 楼

有点怀疑楼上的说法,进程间通信多用文件的方法,而不是靠一个返回值这么简单,因为进程在实际内存中是变动的,而且变量在虚拟内存上是隔离的,如果用寄存器,进程多起来也是不够的。个人觉得这个return 0只是标准,只是教条,遵守就行了。

7 楼

[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 楼

[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 楼

return 可以返回值,让你少用一个变量.
一般,程序返回0代表正常退出,反之则以常退出,Windows下可以用GetExitCodeProcess得到程序返回值

10 楼

void main()已经被C99“抛弃”了,像vc还算认得void main,但g++之类已经不支持了void main()了,尽量用标准、规范一点

我来回复

您尚未登录,请登录后再回复。点此登录或注册