回 帖 发 新 帖 刷新版面

主题:新手问题;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个回复)

11 楼

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

    HANDLE hProcess,    // handle to the process 
    LPDWORD lpExitCode     // address to receive termination status 
   );
这个东西就是为了获得那个 return 值的, 这个函数还可以判定子进程是否还在运行.
子进程正常退出当然有机会把各种消息告诉父进程,但是子进程如果是非正常退出的话就
未必有机会把各种消息告诉父进程了.但这个 API 函数无论如何都有效.而且退出码在很多时候还表示附加的信息.

这只是 WINDOWS 平台上的一个例子. 操作平台那么多, 消息机制也互不相同,非正常退出时是否还有机会发送消息是和平台有关的.但是, 通过这个退出码来传递信息这个途径和平台无关.[/quote]

看了这个说明,哈,我还真没用过这个函数,不知道MS是怎么实现的?什么时候能用到多进程啊,做外挂?

12 楼

哦  知道了,谢谢你啊(楼上的)!要不然就总错了,呵呵 !

13 楼

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

    HANDLE hProcess,    // handle to the process 
    LPDWORD lpExitCode     // address to receive termination status 
   );
这个东西就是为了获得那个 return 值的, 这个函数还可以判定子进程是否还在运行.
子进程正常退出当然有机会把各种消息告诉父进程,但是子进程如果是非正常退出的话就
未必有机会把各种消息告诉父进程了.但这个 API 函数无论如何都有效.而且退出码在很多时候还表示附加的信息.

这只是 WINDOWS 平台上的一个例子. 操作平台那么多, 消息机制也互不相同,非正常退出时是否还有机会发送消息是和平台有关的.但是, 通过这个退出码来传递信息这个途径和平台无关.[/quote]

看了这个说明,哈,我还真没用过这个函数,不知道MS是怎么实现的?什么时候能用到多进程啊,做外挂?[/quote]

我来回复

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