atexit函數介紹

根據我們的理解,一個程序的執行都是從MAIN函數開始執行,從MAIN函數結束,這不可否認沒有問題,然後依次往下一條一條語句執行,但是事實真的是這樣麼,接下來看看這個程序,是不是像我們想象的那樣呢?在linux下我編寫了這樣一個程序,先不要看答案,看看能不能做對(很簡單的)

根據我們剛纔的思路,這個程序應該是先調用fun1,fun2,...依次往下執行,最後的結果就是

i am NO.1!
i am NO.2!
i am NO.3
i am last
process


但是結果真的是這樣麼?懷着一顆想弄明白的心執行了這個程序,最後的結果讓我有點失望,因爲不是我所期望的結果,結果是這個樣子的


這和我預想的結果恰恰相反了,所以通過查閱資料稍微明白了這個atexit函數,接下來我們介紹一下他



atexit函數介紹

這是我在百度上搜到的解釋


atexit()函數
atexit

  函數名: atexit

  頭文件:#include<stdlib.h>

  功 能: 註冊終止函數(即main執行結束後調用的函數)

  用 法: int atexit(void (*func)(void));

  注意:按照ISO C的規定,一個進程可以登記多達32個函數,這些函數將由exit自動調用。atexit()註冊的函數類型應爲不接受任何參數的void函數,exit調用這些註冊函數的順序與它們 登記時候的順序相反。同一個函數如若登記多次,則也會被調用多次。

現在不難解釋上面程序出現的結果了吧,一句話來說就是這個函數會在MAIN函數結束後調用,而且調用順序相反,這裏也就解釋了爲什麼我們程序裏的最後一名跑去當了第一名的原因,因爲在atexit的幫助下,他成爲了一匹黑馬,拿下了第一名(擁有了超能力)。現在應該對atexit函數有個瞭解了吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章