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ểm | exit() | _Exit() |
|---|---|---|
| Gọi atexit handlers | Có | Không |
| Flush I/O buffers | Có | Không |
| Đóng file streams | Có | Không |
| Gọi destructor (C++) | Có | Không |
| Chuẩn | C89/C++98 | C99/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).