zoukankan      html  css  js  c++  java
  • 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 的时候直接在某嵌套函数中终止程序的运行。至于这样的做法好还是不好,那就是另外一个问题了。反正我个人是很反感「结束在调用栈中」这样的退出方式的。

  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/claremore/p/4716263.html
Copyright © 2011-2022 走看看