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

So sánh exit() và _Exit() trong C/C++

exit()

Hàm exit() kết thúc chương trình ngay lập tức, không thực thi tiếp. Nó gọi các hàm đăng ký qua atexit(), flush I/O buffers, đóng file, và gọi destructor của đối tượng C++ (nếu có). Khai báo trong <stdlib.h>.

Cú pháp: void exit(int status);

Ví dụ

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

int main() {
    int x = 10;
    printf("Gia tri x: %d\n", x);
    exit(0);
    printf("Dong nay khong in ra"); // Không bao giờ chạy
    return 0;
}

Kết quả

Gia tri x: 10

_Exit()

Hàm _Exit() (C99/C++11) kết thúc tiến trình ngay lập tức không thực hiện cleanup: không gọi atexit, không flush buffer, không đóng file, không gọi destructor. Trả về kiểm soát cho host environment. Khai báo trong <stdlib.h>.

Cú pháp: void _Exit(int status);

Ví dụ

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

int main() {
    int x = 10;
    printf("Gia tri x: %d\n", x);
    _Exit(0);
    printf("Dong nay cung khong in ra");
    return 0;
}

Kết quả tương tự nhưng không có cleanup.

Bảng so sánh

Đặc điểmexit()_Exit()
Gọi atexit handlersCóKhông
Flush I/O buffersCóKhông
Đóng file streamsCóKhông
Gọi destructor (C++)CóKhông
ChuẩnC89/C++98C99/C++11

Khi nào dùng _Exit(): Trong signal handler, hoặc khi cần thoát ngay mà không muốn chạy cleanup code (có thể gây deadlock hoặc không an toàn).