69,369
社区成员
发帖
与我相关
我的任务
分享
//这段程序为什么在main函数执行完毕后,还能再执行一段代码?原因何在?
#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 ");
}
(gdb)
This is executed first.
(gdb)
(gdb)
0xb7de3775 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
(gdb) bt
#0 0xb7de3775 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
#1 0x080483b1 in _start () at ../sysdeps/i386/elf/start.S:119
(gdb) disassemble $eip $eip+5
Dump of assembler code from 0xb7de3775 to 0xb7de377a:
0xb7de3775 <__libc_start_main+229>: mov %eax,(%esp)
0xb7de3778 <__libc_start_main+232>: call 0xb7dfbb30 <exit>
End of assembler dump.