C 区别于;返回0“;及;出口(0)";

C 区别于;返回0“;及;出口(0)";,c,function,C,Function,在函数中使用时,返回0和退出(0)之间有什么区别吗? 如果是,我应该在函数中何时使用返回0或退出(0) return退出函数,而exit退出程序 在main函数中执行返回0语句或调用exit(0)函数将调用注册的atexit处理程序并导致程序终止。是的,因为没有调用exit的语句。我猜你指的是函数 在这种情况下,有一个很大的区别:exit函数退出进程,换句话说,程序被终止。return语句只是从当前函数返回 它们只有在main函数中使用时才类似。退出0是C语言中的语法错误。您可以使用退出(0)来

在函数中使用时,
返回0
退出(0)
之间有什么区别吗?
如果是,我应该在函数中何时使用
返回0
退出(0)

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


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

是的,因为没有调用
exit
的语句。我猜你指的是函数

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


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

退出0
是C语言中的语法错误。您可以使用
退出(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\u malloc
,您可能希望立即退出程序,而不是返回到
c
错误代码(例如a
NULL
指针),如果该代码不是为处理分配失败而编写的。

    return
    是将控制权返回给调用方的语句 功能
  • exit
    是一个系统调用,它终止当前进程,即 当前正在执行的程序
main()中
返回0
退出(0)执行相同的操作


注意:您必须包括
#包括

退出0?可能没有编译。退出(0)退出您的程序。你可能不想这样,抱歉。我已经编辑了这个问题。这里有一篇类似的帖子,不知道为什么人们在return不是函数的情况下使用return(x)。看@Arthur“try it”通常是完全理解C语言的一种不好的方式,我认为这就是其中之一。关于这个问题,即使在
main
中,它们也是不同的,请看注释。
atexit
处理程序也会在从main返回时被调用。@CarlNorum感谢您的更正,我更新了我的答案。“一些编译器甚至接受并编译代码,即使您不写返回0”,因为这是标准的。