我在代码中使用atexit((函数来清理函数调用,但它不起作用。
#include<stdio.h>
void ftn(void)
{
printf(" Function called --> exitn");
return;
}
int main(void)
{
int x = 0;
atexit(ftn);
for(;x<0xffffff;x++);
_exit(0);
}
任何有关这方面的帮助将不胜感激。
atexit(( 函数的这种行为是由于使用了函数 _exit((。此函数不会调用清理函数,如 atexit(( 等。如果需要调用 atexit((,则应使用 exit(( 或 'return' 而不是 _exit((。
如:
#include<stdio.h>
void ftn(void)
{
printf(" Function called --> exitn");
return;
}
int main(void)
{
int x = 0;
atexit(ftn);
for(;x<0xffffff;x++);
exit(0);
}
_exit
关闭程序而不调用退出方法 进一步阅读。
因此,请使用exit(0);
而不是_exit(0);
#include<stdio.h>
void ftn(void)
{
printf(" Function called --> exitn");
return;
}
int main(void)
{
int x = 0;
atexit(ftn);
for(;x<0xffffff;x++);
exit(0);
}
手册页进行_exit()
_Exit()
和_exit()
函数不得调用向atexit()
或任何已注册的信号处理程序注册的函数。是刷新还是关闭打开的流,还是删除临时文件,都是由实现定义的。最后,调用进程终止,后果如下所述。
所以你看到的是预期的行为。
也就是说,您应该包含unistd.h
(用于_exit()
(和stdlib.h
(用于atexit()
(标头以包含原型。
如果要调用atexit()
注册的函数,则应改为调用exit()
。
exit()
函数应首先调用atexit()
注册的所有函数,其顺序与其注册相反,[....]