函式
<cstdlib>

atexit

int atexit (void (*func)(void));
extern "C" int atexit (void (*func)(void));extern "C++" int atexit (void (*func)(void));
extern "C" int atexit (void (*func)(void)) noexcept;extern "C++" int atexit (void (*func)(void)) noexcept;
設定將在退出時執行的函式
當程式正常終止時,指向 func 的函式將在不帶引數的情況下自動呼叫。

如果透過不同的呼叫指定了多個 atexit 函式,則它們將以相反的順序執行,如同堆疊一樣(即最後指定的函式是退出時第一個執行的函式)。

同一個函式可以被註冊以在退出時執行多次。

如果在呼叫 exit 之後呼叫 atexit,則該呼叫可能成功也可能不成功,具體取決於特定的系統和庫實現(未定義行為)。

如果透過 atexit 註冊的函式在終止時被呼叫,並且它丟擲了一個它沒有處理程式捕獲的異常,則會自動呼叫 terminate(C++)。

特定的庫實現可能會對使用 atexit 註冊的函式數量施加限制,但不能少於 32 個函式呼叫。

引數

函式
將被呼叫的函式。該函式應不返回值且不接受引數。

返回值

如果函式成功註冊,則返回零值。
如果失敗,則返回非零值。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* atexit example */
#include <stdio.h>      /* puts */
#include <stdlib.h>     /* atexit */

void fnExit1 (void)
{
  puts ("Exit function 1.");
}

void fnExit2 (void)
{
  puts ("Exit function 2.");
}

int main ()
{
  atexit (fnExit1);
  atexit (fnExit2);
  puts ("Main function.");
  return 0;
}

輸出

Main function.
Exit function 2.
Exit function 1.


資料競爭

併發呼叫此函式不會引入資料競爭(C++):呼叫在程序級別得到適當的同步。

異常 (C++)

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

另見