c语言exit和return的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言exit和return的区别相关的知识,希望对你有一定的参考价值。

exit函数在头文件stdlib.h中。
exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;
return():返回函数,若在main主函数中,则会退出函数并返回一值,可以写为return(0),或return 0。
详细说:
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的现象就很模糊,多数情况下现象都是一致的。
参考技术A return叫做返回语句,属于C/C++的关键字,功能是将控制返回到主调函数,其返回值是任选的,可有可无,当处在main()函数时,会将控制返回给操作系统,其返回值(整形),可用作该程序的执行状况甄别,以便操作系统给出必要的处理。
exit()叫做退出函数,其定义被包含在头文件stdlib.h中,无论主函数中,还是其他函数中,该函数都会将控制返回到操作系统,其返回值的作用与return处在main()中时的返回值相同。本回答被提问者和网友采纳
参考技术B exit是退出程序,不再执行。return是返回一个数值。
如果返回值是void的函数return可以有可以没有,但一般return 0;函数的返回类型是int,float,double则必须有一个返回值return。
参考技术C exit 退出的整个程序

而return是退出一个函数~~ 程序由main函数入口,由main结束,所以main函数中的return也相当于程序结束,

其他函数return 是表示这个函数的返回值

return 1、return 0、return -1 和 exit 的区别?

【中文标题】return 1、return 0、return -1 和 exit 的区别?【英文标题】:Difference between return 1, return 0, return -1 and exit? 【发布时间】:2014-05-01 12:03:27 【问题描述】:

例如考虑以下代码:

int main(int argc,char *argv[])

   int *p,*q;
   p = (int *)malloc(sizeof(int)*10);
   q = (int *)malloc(sizeof(int)*10);
   if (p == 0)

    printf("ERROR: Out of memory\n");
        return 1;



   if (q == 0)

    printf("ERROR: Out of memory\n");
        exit(0);


   return 0;

return 0return 1exit(0) 在上述程序中做了什么? exit(0) 将退出整个程序,并且控制退出循环,但在 return 0return 1return -1 的情况下会发生什么。

【问题讨论】:

你也必须看到这个 - Difference between exit and return 首先,从内存分配失败返回的exit(0) 给人一种错误的安慰感,因为它几乎肯定应该是exit(EXIT_FAILURE)(毕竟,程序确实只是轰炸了一个内存-分配)。 exit是标准库函数,所以如果你使用它需要#include ,如果你使用return则不需要 【参考方案1】:

表示执行状态。

status 0 表示程序成功。

status 不为 0 表示程序因错误或异常而退出。

return n; 从你的主入口函数将终止你的进程并向父进程(执行你的进程的那个)报告你的进程的结果。 0 表示成功。其他代码通常表示失败及其含义。

【讨论】:

【参考方案2】:

来自main()return等价于exit

程序立即终止执行,退出状态设置为传递给returnexit的值

内部函数中的return(不是main)将立即终止特定函数的执行,并将给定的结果返回给调用函数。

exit 在您的代码中的任何位置都会立即终止程序执行。


status 0 表示程序成功。

status 不为 0 表示程序因错误或异常而退出。

如果您以不同于 0 的状态退出,您应该向stderr 打印一条错误消息,因此最好不要使用printf 之类的东西

if(errorOccurred) 
    fprintf(stderr, "meaningful message here\n");
    return -1;

请注意(取决于您使用的操作系统)有一些关于返回码的约定。

Google 搜索“退出状态代码”或类似内容,您会在 SO 和其他地方找到大量信息。


值得一提的是,如果您尝试执行一些无效操作,例如读取您无权访问的内存,操作系统本身可能会以特定的退出状态代码终止您的程序。

【讨论】:

【参考方案3】:

函数中的return将执行返回给调用者,函数中的exit终止程序。

main 函数中return 0exit(0) 是相同的,但是如果您在不同的函数中编写exit(0),那么您的程序将从该位置退出。

返回不同的值,如 return 1return -1 意味着程序返回错误。

exit(0) 用于退出程序时,不会调用局部作用域非静态对象的析构函数。但是如果使用 return 0,就会调用析构函数。

【讨论】:

【参考方案4】:

正如here 解释的那样,在main 的上下文中returnexit 做同样的事情

问:为什么我们需要returnexit

A:表示执行状态。

在您的示例中,即使您没有 return 或 exit 语句,代码也会运行良好(假设其他所有内容在语法等方面都是正确的。此外,如果(并且应该是)main 返回 int 您需要最后是return 0)。

但是,在执行后,您无法确定您的代码是否按预期工作。 您可以使用程序的返回码(在 *nix 环境中,使用$?),它会为您提供代码(由exitreturn 设置)。由于您自己设置了这些代码,因此您了解代码在终止之前到达的位置。

您可以写return 123,其中123 表示执行后检查成功。

通常,在 *nix 环境中,0 被视为成功,非零代码被视为失败。

【讨论】:

【参考方案5】:

来自mainreturn n 等价于exit(n)

返回的有效内容是程序的其余部分。它的意思是依赖于操作系统。在 unix 上,0 表示正常终止,非零表示这种形式的错误迫使您的程序在没有达到预期目的的情况下终止。

当您的示例似乎内存不足时返回 0(正常终止)是不寻常的。

【讨论】:

【参考方案6】:

您的主入口函数中的return n 将终止您的进程并向父进程(执行您的进程的那个)报告您的进程结果。 0 表示成功。其他代码通常表示失败及其含义。

【讨论】:

“父进程”和“调用函数”一样吗?

以上是关于c语言exit和return的区别的主要内容,如果未能解决你的问题,请参考以下文章

C语言中exit(0)与exit(1)有啥区别??

exit() 与 return() 的区别

C语言异常处理和exit()怎样使用?

C语言再学习 -- 关键字return和exit ()函数

退出和返回有啥区别? [复制]

c语言程序出现ld returned 1 exit status怎么搞?