说明
一般main函数中的写法:
#include <stdio.h>
int main(void) {
printf("This is executed in \"main\" function.\n");
return 0;
}
但实际上,在main函数结束的过程中会隐式调用到exit函数,准确的说,上例中是exit(0),0表示的是函数执行成功。
使用return和exit返回,对于main函数来说差别不大。
但是还是需要注意,return只是表示函数的结束,而exit表示的是进程的结束。
下面的例子是其他函数中使用了exit:
#include <stdio.h>
//exit函数定义在stdlib中
#include <stdlib.h>
//函数调用了exit函数
void function(void) {
printf("This is executed in \"function\" function.\n");
exit(0);
}
int main(void) {
function();//这里会直接返回,所以下面的打印不会出现
printf("This is executed in \"main\" function.\n");
return 0;
}
执行的结果如下:
下面是在main函数中使用exit的例子:
#include <stdio.h>
//exit函数定义在stdlib中
#include <stdlib.h>
int main(void) {
printf("This is executed in \"main\" function.\n");
exit(0);
}
使用exit的时候,还有一个会做的事情是,执行回调函数,这些回调函数通过atexit函数来注册。
下面是一个例子:
#include <stdio.h>
//atexit也在stdlib这个头文件中
#include <stdlib.h>
//注意回调函数的形式
void function(void) {
printf("This is executed after returning from \"main\" function.\n");
}
int main(void) {
//用来注册从main函数返回后执行的函数
atexit(function);
printf("This is executed in \"main\" function.\n");
exit(0);
}
下面是执行的结果:
需要注意的是,与exit函数类似的还有_exit(),如果使用这个函数,那么就不会回调函数了:
#include <stdio.h>
//atexit在stdlib这个头文件中
#include <stdlib.h>
//注意回调函数的形式
void function(void) {
printf("This is executed after returning from \"main\" function.\n");
}
int main(void) {
//用来注册从main函数返回后执行的函数
atexit(function);
printf("This is executed in \"main\" function.\n");
//回调函数不会执行
_exit(0);
}
执行的结果如下:
注册回调函数还有一个顺序的问题,后注册的函数先被调用。下面是一个例子:
#include <stdio.h>
//atexit也在stdlib这个头文件中
#include <stdlib.h>
//注意回调函数的形式
void function(void) {
printf("This is first function.\n");
}
void function2(void) {
printf("This is second function.\n");
}
int main(void) {
//用来注册从main函数返回后执行的函数
atexit(function);
atexit(function2);
printf("This is executed in \"main\" function.\n");
exit(0);
}
执行的结果如下: