exit()
Kết thúc chương trình bình thường. Gọi atexit handlers, flush buffer, đóng file, gọi destructor (C++). Khai báo trong <stdlib.h>.
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("Khong in ra"); // Không chạy
return 0;
}
Kết quả
Gia tri x: 10
abort()
Kết thúc chương trình bất thường (abnormal termination). Không cleanup, không gọi destructor, không flush buffer. Sinh core dump (nếu cấu hình). Khai báo trong <stdlib.h>. Không khuyên dùng cho thoát bình thường.
void abort(void);
Ví dụ
#include <stdio.h>
#include <stdlib.h>
int main() {
int a = 15;
printf("Gia tri a: %d\n", a);
abort();
printf("Khong in ra");
return 0;
}
Kết quả
Gia tri a: 15
Aborted (core dumped)
assert()
Kiểm tra điều kiện (debug). Nếu biểu thức sai (0), in thông báo lỗi và gọi abort(). Nếu đúng, không làm gì. Khai báo trong <assert.h>. Thường bị vô hiệu hóa khi define NDEBUG (release build).
void assert(int expression);
Ví dụ
#include <stdio.h>
#include <assert.h>
int main() {
int a = 15;
printf("Gia tri a: %d\n", a);
assert(a != 15); // Sai -> abort
printf("Khong in ra");
return 0;
}
Kết quả
Gia tri a: 15
Assertion failed: a != 15, file main.c, line 9
Aborted (core dumped)
Bảng so sánh
| Hàm | Loại thoát | Cleanup | Dùng khi |
|---|---|---|---|
| exit() | Bình thường | Đầy đủ | Kết thúc chương trình có kiểm soát |
| _Exit() | Bình thường | Không | Signal handler, tránh deadlock |
| abort() | Bất thường | Không | Lỗi nghiêm trọng không thể phục hồi |
| assert() | Bất thường | Không | Kiểm tra điều kiện debug (precondition) |