函数atexit
按照ISO C的规定,一个进程可以登记32个终止处理程序(exit handler),这些终止处理程序(即函数)将由exit自动调用,在exit自动调用之前,需要使用atexit函数登记这些函数。
以下是各实现提供的终止处理程序个数限制:
限制 | FreeBSD 8.0 | Linux 3.2.0 | Mac OS X 10.6.8 | Solaris 10 |
ATEXIT_MAX | 32 | 2147483647 | 2147483647 | 无限制 |
atexit函数原型:
#include<stdlib.h>
int atexit(void (*func)(void));
其中atexit的参数是一个函数地址,该函数无需向它传递参数,也不期望返回一个值。exit调用终止处理函数的顺序和atexit登记的顺序相反,如果一个函数被多次登记,也会被多次调用。
注:main函数返回一个整型值与用该值调用exit是等价的,即:
exit(0);
等价于
return 0;
但与return不同的是,exit()可在非main函数中结束程序/进程