在函数中使用时,return 0
和exit (0)
之间是否有任何区别?
如果是,我何时应该在函数中使用return 0
或exit (0)
?
答案 0 :(得分:22)
return
退出程序时, exit
退出该函数。
在main
函数中执行return 0;
语句或调用exit(0)
函数将调用已注册的atexit
处理程序并导致程序终止。
答案 1 :(得分:10)
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
,您可能希望在现场退出程序而不是返回{ {1}}错误代码(例如c
指针)如果没有编写代码来处理分配失败。
答案 2 :(得分:8)
是的,因为没有名为exit
的陈述。我想你的意思是功能 exit
?
在这种情况下,存在大差异:exit
函数退出进程,换句话说,程序终止。 return
语句只是从当前函数返回。
只有在main
函数中使用它们时才相似。
答案 3 :(得分:0)
return
是一个将控制权返回给调用的语句
功能exit
是一个系统调用,它终止当前进程,即
目前正在执行计划。在main()
中,return 0;
和exit(0);
执行相同的操作。
注意:您必须包含#include<stdlib.h>
。