Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Hàm atexit() trong C/C++

Hàm atexit() đăng ký hàm sẽ được gọi khi chương trình kết thúc bình thường (gọi exit() hoặc return từ main). Hàm đăng ký không tham số. Khai báo trong <stdlib.h>.

Cú pháp

int atexit(void (*func)(void));

Trả về 0 nếu thành công, khác 0 nếu lỗi (hết slot đăng ký).

Ví dụ

#include <stdio.h>
#include <stdlib.h>

void func1(void) { printf("\nThoat ham 1"); }
void func2(void) { printf("\nThoat ham 2"); }

int main() {
    atexit(func1);
    printf("\nBat dau main()");
    atexit(func2);
    printf("\nKet thuc main()");
    return 0;
}

Kết quả


Bat dau main()
Ket thuc main()
Thoat ham 2
Thoat ham 1

Giải thích: Các hàm đăng ký qua atexit được gọi theo thứ tự LIFO (Last In First Out) – hàm đăng ký sau chạy trước. Chúng chạy sau khi main kết thúc (trước khi process exit).

Ứng dụng

  • Cleanup tài nguyên toàn cục (đóng log, ghi config, giải phóng shared memory).
  • Đảm bảo code chạy khi thoát bình thường từ nhiều điểm khác nhau.
Lưu ý: atexit không được gọi nếu chương trình kết thúc bởi _Exit(), abort(), hoặc crash (signal không bắt). Giới hạn số hàm đăng ký (thường 32-200 tùy implementation).