**
exit()函数与return关键字
**
语法:
#include <stdlib.h>
void exit(int exit_code);
功能:
终止程序的执行。参数exit_code 传递给返回值,通常零值表示正常结束,非零值表示应错误返回。
用法:
exit(0)表示程序正常, exit(1)和exit(-1)表示程序异常退出,exit(2)表示表示系统找不到指定的文件
特点:
单独的进程是返回给操作系统的。如果是多进程,是返回给父进程的;
exit()就是当前进程把控制权返回给调用该程序的程序,括号里的是返回值,告诉调用程序该程序的运行状态。
exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用exit函数。
exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。
exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程;
return与exit()
1.return返回函数值,exit是函数
2.return是语言级别的,表示堆栈的返回;exit是系统级别的调用,表示进程的结束
3.return是C语言提供的;exit是操作系统提供的或库函数提供
4.而return是返回函数值并退出函数;exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程
atexit终止处理程序
ISO C规定,一个进程最多可登记32个终止处理函数,这些函数由exit按登记相反的顺序自动调用。如果同一函数登记多次,也会被调用多次。
语法:
#include <stdlib.h>
int atexit(void (*func)(void));
功能:当程序终止执行时,函数调用函数指针func所指向的函数。可以执行多重调用(至少32个),这些函数以其注册的倒序执行。执行成功返回零值,失败则返回非零值。
以下面的程序为例:
eg:
#include <stdlib.h>
static void myexit1()
{
printf("first exit handler\n");
}
static void myexit2()
{
printf("second exit handler\n");
}
int main()
{
atexit(my_exit2);
atexit(my_exit1);
atexit(my_exit1);
printf("main is done\n");
return 0;
}
运行结果:
$ ./a.out
main is done
first exit handler
first exit handler
second exit handler