在函数中使用时,return 0和exit (0)有什么区别吗?如果是,什么时候应该在函数中使用return 0或exit (0)?
发布于 2013-06-30 01:46:29
return从函数中退出,而exit从程序中退出。
在main函数中,执行return 0;语句或调用exit(0)函数都会调用已注册的atexit处理程序,从而导致程序终止。
发布于 2013-06-30 01:49:05
在C中,exit 0是一个语法错误。你可以使用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指针)。
发布于 2013-06-30 01:47:09
是的,因为没有名为exit的语句。我猜你指的是函数exit
在这种情况下,有一个很大的区别:exit函数退出进程,换句话说,程序被终止。return语句只是从当前函数返回。
只有在main函数中使用时,它们才相似。
https://stackoverflow.com/questions/17383015
复制相似问题