【发布时间】:2018-04-13 13:08:25
【问题描述】:
返回值:
The atexit() function returns the value 0 if successful; otherwise, it returns a nonzero value.
示例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void
bye(void)
{
printf("That was all, folks\n");
}
int
main(void)
{
long a;
int i;
a = sysconf(_SC_ATEXIT_MAX);
printf("ATEXIT_MAX = %ld\n", a);
i = atexit(bye);
if (i != 0) {
fprintf(stderr, "cannot set exit function\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
我已经阅读了手册页和 StackOverflow 问题,但仍有三个关于 atexit 的问题:
-
atexit什么时候会失败,所以它会返回非零值?请给我这样的演示,谢谢! - 正如我们所知,
bye在调用 exit() 之前不会被调用。那么这是否意味着在调用 exit() 之前我们无法知道atexit的返回值?如果是,那么第三个问题: - 既然已经调用了exit(),那么
if表达式怎么执行?
【问题讨论】:
-
atexit不需要能够存储无限数量的函数指针,因此如果内存不足,它可能会返回错误代码。 -
“我已阅读手册页和 StackOverflow 问题” - 恭喜。你已经是前 1% 的开发者了!
-
atexit只是注册一个函数作为退出处理程序的一部分调用。它的返回值是注册是否成功;不是它注册的函数的返回值;atexit不会调用已注册的函数;当程序退出时(通常)会调用它们。