例如,考虑以下代码:
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
的情况下会发生什么。
6条答案
按热度按时间kb5ga3dv1#
return
从main()
等效于exit
程序立即终止执行,exit status设置为传递给
return
或exit
的值内部函数中的
return
(不是main
)将立即终止特定函数的执行,并将给定结果返回给调用函数。exit
将立即终止程序执行。状态0表示程序成功。
不同于0的状态意味着程序由于错误或异常而退出。
如果退出时状态不为0,则应该向
stderr
输出错误消息,因此,不要使用printf
,最好使用以下命令注意(取决于你使用的操作系统)有一些关于返回码的约定。
谷歌“退出状态代码”或类似的,你会发现大量的信息,SO和其他地方。
值得一提的是,如果你试图做一些无效的操作,比如读取你无法访问的内存,操作系统本身可能会用特定的退出状态代码终止你的程序。
jfgube3f2#
指示执行状态。
状态0表示程序成功。
不同于0的状态意味着程序由于错误或异常而退出。
**return n;**将终止您的进程,并向父进程(执行您的进程的进程)报告您的进程的结果。0表示成功。其他代码通常表示故障及其含义。
b09cbbtk3#
主入口函数中的
return n
将终止进程并向父进程(执行进程的进程)报告进程结果。0表示成功。其他代码通常表示故障及其含义。e0uiprwp4#
正如here所解释的,在
main
的上下文中,return
和exit
都做同样的事情问:为什么需要
return
或exit
?A:表示执行状态。
在你的例子中,即使你没有return或exit语句,代码也会运行得很好(假设其他一切在语法上都是正确的。此外,如果(应该是)
main
返回int
,则需要在最后返回return 0
)。但是,在执行之后,你没有办法发现你的代码是否按预期工作。您可以使用程序的返回代码(在 *nix环境中,使用
$?
),它提供了代码(由exit
或return
设置)。由于您自己设置了这些代码,因此您可以了解代码在终止之前到达的位置。您可以写入
return 123
,其中123
表示执行后检查成功。通常,在 *nix环境中,
0
被视为成功,非零代码被视为失败。stszievb5#
return n
从main
等价于exit(n)
。返回的有效值是程序的其余部分。它的意思是依赖于操作系统。在unix上,0表示正常终止,非零表示这种形式的错误迫使程序终止,而没有实现其预期目的。
当您的示例似乎已经耗尽内存时,它返回0(正常终止),这是不寻常的。
0yg35tkg6#
函数中的
return
将执行返回给调用者,函数中的exit
终止程序。在
main
函数中,return 0
或exit(0)
是相同的,但是如果在不同的函数中写入exit(0)
,则程序将从该位置退出。返回不同的值,如
return 1
或return -1
意味着程序返回错误。当使用
exit(0)
退出程序时,不会调用本地作用域的非静态对象的析构函数。但如果使用return 0,则会调用析构函数。