【问题标题】:Difference between "return 0" and "exit (0)" [duplicate]“返回0”和“退出(0)”之间的区别[重复]
【发布时间】:2013-06-27 07:23:04
【问题描述】:

在函数中使用return 0exit (0) 有什么区别吗? 如果是,我应该什么时候在函数中使用return 0exit (0)

【问题讨论】:

标签: c function


【解决方案1】:

return 退出函数,exit 退出程序。

main 函数中执行return 0; 语句或调用exit(0) 函数将调用注册的atexit 处理程序并导致程序终止。

【讨论】:

  • atexit 处理程序在从 main 返回时也会被调用。
  • @CarlNorum 感谢您的更正,我更新了我的答案。
【解决方案2】:

exit 0 是 C 中的语法错误。您可以使用 exit(0) 代替对标准库函数的调用。

函数exit 将退出整个程序,将提供的退出代码返回给操作系统。 return 语句只是退出当前函数,给调用者指定的结果。

只有在main使用时才相同(因为退出main函数会终止程序)。

通常exit 仅用于您想终止程序的紧急情况,因为没有明智的方法可以继续执行。例如:

//
// Ensure allocation of `size` bytes (will never return
// a NULL pointer to the caller).
//
// Too good to be true? Here's the catch: in case of memory
// exhaustion the function will not return **at all** :-)
//
void *safe_malloc(int size) {
    void *p = malloc(size);
    if (!p) {
        fprintf(stderr, "Out of memory: quitting\n");
        exit(1);
    }
    return p;
}

在这种情况下,如果函数a 调用函数b 调用函数c 调用safe_malloc,您可能希望当场退出程序而不是返回到c 错误代码(例如NULL 指针),如果没有编写代码来处理分配失败。

【讨论】:

    【解决方案3】:

    是的,因为没有名为exit 的语句。我猜你的意思是 function exit?

    在这种情况下,有一个很大的区别:exit 函数退出进程,换句话说,程序被终止。 return 语句只是从当前函数返回。

    它们只有在 main 函数中使用时才相似。

    【讨论】:

      【解决方案4】:
      • return 是将控制权返回给调用方的语句 功能。
      • exit 是一个系统调用,它终止当前进程,即 当前正在执行的程序。

      main() 中,return 0;exit(0); 执行相同的操作。

      注意:您必须包含#include<stdlib.h>

      【讨论】:

      • “有些编译器甚至接受并编译代码,即使你不写 return 0” 因为它是标准的。
      猜你喜欢
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 2014-10-09
      • 2011-11-04
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      相关资源
      最近更新 更多