exit()
和 atexit()
是 C 語(yǔ)言中用于處理程序退出和執(zhí)行清理操作的兩個(gè)函數(shù)
exit()
函數(shù)是一個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù),用于終止程序的執(zhí)行。當(dāng)程序調(diào)用 exit()
時(shí),它將立即停止執(zhí)行,并返回給定的狀態(tài)碼(通常為 0 表示成功,非零值表示錯(cuò)誤)。在程序退出之前,exit()
會(huì)自動(dòng)關(guān)閉所有打開(kāi)的文件流、釋放分配的內(nèi)存等。如果你需要在程序退出時(shí)執(zhí)行特定的清理操作,可以使用 atexit()
函數(shù)來(lái)注冊(cè)一個(gè)或多個(gè)清理函數(shù)。atexit()
函數(shù)允許你在程序退出時(shí)注冊(cè)一個(gè)或多個(gè)清理函數(shù)。這些清理函數(shù)將在 exit()
被調(diào)用時(shí)執(zhí)行,通常用于釋放資源、關(guān)閉文件等。當(dāng)你調(diào)用 atexit()
時(shí),傳遞給它的函數(shù)指針將被添加到一個(gè)清理函數(shù)列表中。在程序退出時(shí),這些清理函數(shù)將按照后進(jìn)先出(LIFO)的順序依次執(zhí)行。下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用 atexit()
和 exit()
函數(shù):
#include<stdio.h>
#include <stdlib.h>
void cleanup1(void) {
printf("Cleanup function 1 called.\n");
}
void cleanup2(void) {
printf("Cleanup function 2 called.\n");
}
int main(void) {
atexit(cleanup1);
atexit(cleanup2);
printf("Main function executed.\n");
exit(0);
}
輸出:
Main function executed.
Cleanup function 2 called.
Cleanup function 1 called.
在這個(gè)示例中,我們注冊(cè)了兩個(gè)清理函數(shù) cleanup1()
和 cleanup2()
。當(dāng)程序調(diào)用 exit(0)
時(shí),這兩個(gè)清理函數(shù)將按照后進(jìn)先出的順序執(zhí)行。