函式
<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++)

無異常保證:此函式從不丟擲異常。

另見