題:main主函數執行完畢後,是是否可能會再執行一段代碼?給出說明。
答:如果需要加入一段在main退出後執行的代碼,可以使用atexit()函數註冊一個函數,代碼如下:
#include <stdio.h>
#include <stdlib.h>
int atexit(void(*function)(void));
void fn1(void),fn2(void),fn3(void),fn4(void);
int main()
{
atexit(fn1);
atexit(fn2);
atexit(fn3);
atexit(fn4);
printf("This is executed first.\n");
return 0;
}
void fn1()
{
printf(" next.\n");
}
void fn2()
{
printf(" executed ");
}
void fn3()
{
printf(" is");
}
void fn4()
{
printf("This");
}
執行結果:
This is executed first.
This is executed next.
說明:
(1)函數原型:int atexit( void ( __cdecl *func )( void ) );
(2)The atexit function is passed the address of a function (func) to be called when the program terminates normally. Successive calls to atexit create a register of functions that are executed in LIFO (last-in-first-out) order. The functions passed to atexit cannot take parameters. atexit and _onexit use the heap to hold the register of functions. Thus, the number of functions that can be registered is limited only by heap memory.