函数
<cstdlib>

at_quick_exit

int at_quick_exit (void (*func)(void));
extern "C" int at_quick_exit (void (*func)(void)) noexcept;extern "C++" int at_quick_exit (void (*func)(void)) noexcept;
设置将在快速退出时执行的函数
当调用 quick_exit 时,将自动调用由 func 指向的函数(不带参数)。

如果有多个 at_quick_exit 函数由不同的调用指定,它们将按相反的顺序全部执行。

如果在调用 quick_exit 时,通过 at_quick_exit 注册的函数抛出了它没有处理的异常,则会自动调用 terminate(C++)。

请注意,at_quick_exit 函数栈独立于 atexit 栈(并且由不同的情况触发),但相同的函数可以同时传递给这两个函数,以便在两种情况下都调用它。

特定的库实现可能对可以向 at_quick_exit 注册的函数数量施加限制,但这个数量不能少于 32 个函数。

参数

函数
将要调用的函数。该函数不返回值,也不接受参数。

返回值

如果函数已成功注册,则返回零。
如果失败,则返回非零值。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* at_quick_exit example */
#include <stdio.h>      /* puts */
#include <stdlib.h>     /* at_quick_exit, quick_exit, EXIT_SUCCESS */

void fnQExit (void)
{
  puts ("Quick exit function.");
}

int main ()
{
  at_quick_exit (fnQExit);
  puts ("Main function: Beginning");
  quick_exit (EXIT_SUCCESS);
  puts ("Main function: End");  // never executed
  return 0;
}

输出

Main function: Beginning
Quick exit function.


数据竞争

并发调用此函数不会引起数据竞争:调用是进程级别同步的,但请注意,来自不同线程的调用的相对顺序是不确定的。
在调用 quick_exit 之前未完成的 at_quick_exit 调用可能不会成功(取决于具体的库实现)。

异常 (C++)

无异常保证:此函数从不抛出异常。

另见