返回1,返回0,返回-1和退出之间的区别?

时间:2014-03-24 08:20:46

标签: c return exit

例如,请考虑以下代码:

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的情况下会发生什么。

6 个答案:

答案 0 :(得分:25)

来自return

main()相当于exit

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

内部函数(不是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 returnexit的情况下,同样的事情

问:为什么我们需要returnexit

答:表明执行状态。

在你的例子中,即使你没有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 0exit(0)中的

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

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

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