例如,请考虑以下代码:
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
的情况下会发生什么。
答案 0 :(得分:25)
return
的 main()
相当于exit
程序会立即终止执行,退出状态设置为传递给return
或exit
的值
return
)中的 main
将立即终止执行特定函数,将给定结果返回给调用函数。
exit
将立即终止程序执行。
状态0表示程序成功。
状态与0不同意味着程序因错误或异常而退出。
如果您退出的状态不是0,则应该向stderr
打印错误消息,而不是使用printf
更好的内容,例如
if(errorOccurred) {
fprintf(stderr, "meaningful message here\n");
return -1;
}
请注意(取决于您所使用的操作系统),有一些关于返回代码的约定。
Google for"退出状态代码"或类似的,你会在SO和其他地方找到大量的信息。
值得一提的是,如果您尝试执行某些无效操作(如读取无法访问的内存),操作系统本身可能会使用特定的退出状态代码终止您的程序。
答案 1 :(得分:1)
return n
将终止您的流程并向您的流程(执行流程的流程)报告流程的结果。 0表示成功。其他代码通常表示失败及其含义。
答案 2 :(得分:0)
return n
的 main
相当于exit(n)
。
返回的有效内容是程序的其余部分。它的含义取决于操作系统。在unix上,0表示正常终止,非零表示错误形式迫使程序终止而不实现其预期目的。
您的示例在内存耗尽时返回0(正常终止)是不常见的。
答案 3 :(得分:0)
正如here所解释的那样,在main
return
和exit
的情况下,同样的事情
问:为什么我们需要return
或exit
?
答:表明执行状态。
在你的例子中,即使你没有return或exit语句,代码也可以正常运行(假设其他所有内容都是语法上的,等等也是正确的。另外,if(应该是)main
返回{{1你最后需要int
。
但是,执行后你无法找到你的代码是否按预期工作。
您可以使用程序的返回代码(在* nix环境中,使用return 0
),它会为您提供代码(由$?
或exit
设置)。由于您自己设置这些代码,因此您可以了解代码在终止之前到达的位置。
您可以编写return
return 123
表示执行后检查成功。
通常,在* nix环境中123
被视为成功,非零代码被视为失败。
答案 4 :(得分:0)
指示执行状态。
状态0表示程序成功。
状态不同于0表示程序由于错误或异常而退出。
从主输入功能中返回n; 将会终止您的流程,并向父流程(执行您的流程的人)报告流程的结果。 0表示成功。其他代码通常表示失败及其含义。
答案 5 :(得分:-2)
return
将执行返回给调用者,函数中的exit
终止程序。
main
函数return 0
或exit(0)
中的是相同的,但如果您在不同的函数中编写exit(0)
,那么您的程序将退出该位置。
返回return 1
或return -1
等不同值意味着程序返回错误。
当使用exit(0)
退出程序时,不会调用本地作用域的非静态对象的析构函数。但是如果使用return 0,则会调用析构函数。