• exit() 和 return


    exit(0):正常运行程序并退出程序;

    exit(1):非正常运行导致退出程序;

    return():返回函数,若在主函数中,则会退出函数并返回一值。

    详细说: 

    1. return返回函数值,是关键字;  exit 是一个函数。

    2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。 

    3. return是函数的退出(返回);exit是进程的退出。

    4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。

    5. return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出, 非0 为非正常退出。

    6. 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。

    C++中 exit() 与 return 表现出的区别

    exit():

    代码
    #include <iostream>
    using namespace std;
    class Temp
    {
    public:
        Temp(){cout<<"Constructor!"<<endl;}
        ~Temp(){cout<<"Destructor!"<<endl;}
    };
    int main()
    {   
        Temp t;
        exit(0) ;
    }

    Constructor!
    Press any key to continue

    return:

    代码
    #include <iostream>
    using namespace std;
    class Temp
    {
    public:
        Temp(){cout<<"Constructor!"<<endl;}
        ~Temp(){cout<<"Destructor!"<<endl;}
    };
    int main()
    {   
        Temp t;
        return 0;
    }

    Constructor!
    Destructor!
    Press any key to continue

    综上:

    exit()退出程序,把控制权交给OS
    return结束当前函数,返回函数值,把控制权交给调用函数
    在main函数中return 与exit用法差不多,
    但return会自动调用对象的析构函数, 而exit不会

    C/C++ 中 exit() 函数的参数有什么意义 (转自知乎)

    问:

    1)我知道0表示正常退出,非0表示错误退出,但是这参数究竟有什么意义呢?

    2)据说面向对象中不建议使用exit()函数,如果是,这是为什么呢,又该用什么方法替换呢?

    答:

    C 语言的设计之初就是为 Unix 系统设计的,而这个系统是『很多程序互相配合』搭配成一个系统。

    每个运行着的程序都是进程,而进程就会有父进程,父进程通常是直接启动你的进程,父进程死亡的进程会被 init 收养,其父进程变为 init,而 init 的父进程是进程 0,进程 0 则是系统启动时启动的第一个进程。

    exit() 里面的参数,是传递给其父进程的。对父进程来说,你的进程就像是一个函数,而函数可以有返回值。

    1)这个参数有什么意义:

    exit() 的参数,是给自己的父进程使用的。通常一个程序的父进程可能是任何进程,因此我们无法预期我们的父进程是否规定必须要有这个返回值,那么我们应当提供这个返回值,以保证不同的父进程的需求得到满足。

    一个典型的例子是 make,Makefile 对于一个 target 下面有多条顺序执行的语句,而 make 作为父进程,会检查每个语句的返回值是否为 0 ,遇到任何一个非 0 值,都会停止当前 rule 的执行。而我们知道,make 实际上可以执行任何命令任何程序,因而任何被 make 调用的程序必须有正确的返回值。

    2)为什么要使用 exit() 函数:

    事实上在大部分系统里,main 函数都不是应用程序的真正入口点。

    真正入口点是 C 运行库里的一个函数,那个函数要负责先做一些初始化工作,然后才调用 main。main 返回到运行库里的入口函数后,它还要做一些善后工作。

    如果有任何一个平台必须调用 exit 才能正常退出,那这个平台就一定会把 exit 封装在 C 运行库里,让 main 返回的时候调用 exit 实现「正常退出」。

    exit 函数存在的价值是在你不想或不愿意返回 main 的时候直接在某嵌套函数中终止程序的运行。至于这样的做法好还是不好,那就是另外一个问题了。反正我个人是很反感「结束在调用栈中」这样的退出方式的。

  • 相关阅读:
    如何设置IIS实现无扩展名重写
    正则表达式基础知识
    Literal控件用法
    ajaxPro.dll基础教程
    PetShop的系统架构设计
    SQL点滴29—错误无处不在
    javascript中的正则表达式
    为什么开发环境如此之乱
    SQL点滴文章总结
    javascript读写cookie
  • 原文地址:https://www.cnblogs.com/claremore/p/4716263.html
Copyright © 2020-2023  润新知