return 1、return 0、return -1 和 exit 的区别?
Posted
技术标签:
【中文标题】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 0
、return 1
、exit(0)
在上述程序中做了什么?
exit(0)
将退出整个程序,并且控制退出循环,但在 return 0
、return 1
、return -1
的情况下会发生什么。
【问题讨论】:
你也必须看到这个 - Difference between exit and return 首先,从内存分配失败返回的exit(0)
给人一种错误的安慰感,因为它几乎肯定应该是exit(EXIT_FAILURE)
(毕竟,程序确实只是轰炸了一个内存-分配)。
exit
是标准库函数,所以如果你使用它需要#include return
则不需要表示执行状态。
status 0 表示程序成功。
status 不为 0 表示程序因错误或异常而退出。
return n; 从你的主入口函数将终止你的进程并向父进程(执行你的进程的那个)报告你的进程的结果。 0 表示成功。其他代码通常表示失败及其含义。
【讨论】:
【参考方案2】:来自main()
的return
等价于exit
程序立即终止执行,退出状态设置为传递给return
或exit
的值
内部函数中的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 0
或exit(0)
是相同的,但是如果您在不同的函数中编写exit(0)
,那么您的程序将从该位置退出。
返回不同的值,如 return 1
或 return -1
意味着程序返回错误。
当exit(0)
用于退出程序时,不会调用局部作用域非静态对象的析构函数。但是如果使用 return 0,就会调用析构函数。
【讨论】:
【参考方案4】:正如here 解释的那样,在main
的上下文中return
和exit
做同样的事情
问:为什么我们需要return
或exit
?
A:表示执行状态。
在您的示例中,即使您没有 return 或 exit 语句,代码也会运行良好(假设其他所有内容在语法等方面都是正确的。此外,如果(并且应该是)main
返回 int
您需要最后是return 0
)。
但是,在执行后,您无法确定您的代码是否按预期工作。
您可以使用程序的返回码(在 *nix 环境中,使用$?
),它会为您提供代码(由exit
或return
设置)。由于您自己设置了这些代码,因此您了解代码在终止之前到达的位置。
您可以写return 123
,其中123
表示执行后检查成功。
通常,在 *nix 环境中,0
被视为成功,非零代码被视为失败。
【讨论】:
【参考方案5】:来自main
的return n
等价于exit(n)
。
返回的有效内容是程序的其余部分。它的意思是依赖于操作系统。在 unix 上,0 表示正常终止,非零表示这种形式的错误迫使您的程序在没有达到预期目的的情况下终止。
当您的示例似乎内存不足时返回 0(正常终止)是不寻常的。
【讨论】:
【参考方案6】:您的主入口函数中的return n
将终止您的进程并向父进程(执行您的进程的那个)报告您的进程结果。 0 表示成功。其他代码通常表示失败及其含义。
【讨论】:
“父进程”和“调用函数”一样吗?以上是关于return 1、return 0、return -1 和 exit 的区别?的主要内容,如果未能解决你的问题,请参考以下文章
int fun(int n){switch(n){case 0: return 0;case 1: return 1;case 2: return 1;default:return fun(n-)}}