初次从面试宝典中看到这个问题,我那也是一脸的懵逼啊。老师一直告诉我们,main是函数的入口地址,执行完成后,就返回操作系统了。殊不知还有这么多没了解过的知识。

题目:

main()函数执行完后,还会调用执行其他的语句吗?

       我们通常认为C语言的起始函数是main()函数,实质上一个程序的启动函数并不一定是main()函数,这个可以采用链接器来设置,但是gcc中默认main()就是C语言的入口函数,在main函数启动之前,内核会调用一个特殊的启动例程,这个启动例程从内核中取得命令行参数值和环境变量值,为调用main()函数做好准备。

      因此对应程序而言main()函数并不是起始,但是对应C 语言而言,main()函数就是入口地址。

    按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用,通常这32个函数被称为终止处理程序,并调用atexit()函数来登记这些函数。 (函数的调用顺序与注册的顺序是相反的,通过下面的实例可以看出来)     

举例

代码如下:

#include<stdio.h>
#include<stdlib.h>
void fun1(void)
{
printf("fun1\n");
}

void fun2(void)
{
printf("fun2\n");
}

void fun3(void)
{
printf("fun3\n");
}
int main()
{
atexit(fun1);
atexit(fun2);
atexit(fun3);

printf("main exit\n");

return 0;
}


运行结果:

C++面试题: main函数执行完之后还会调用其他的函数吗?_atexit


函数说明:

头文件:#include <stdlib.h>

定义函数:int atexit (void (*function) (void));

atexit()用来设置一个程序正常结束前调用的函数. 当程序通过调用exit()或从main()中返回时, 参数function 所指定的函数会先被调用, 然后才真正由exit()结束程序。