Hàm atexit () trong C ++ đăng ký một hàm được gọi khi kết thúc chương trình bình thường.
Hàm atexit () trong C ++ đăng ký một hàm được gọi khi kết thúc chương trình bình thường.
nguyên mẫu atexit ()
extern int atexit (void (* func) (void));
Hàm này được định nghĩa trong tệp tiêu đề.
Tham số atexit ()
- func: Con trỏ đến hàm được gọi khi kết thúc chương trình bình thường.
atexit () Giá trị trả về
Hàm atexit () trả về:
- 0 nếu đăng ký chức năng thành công.
- Khác 0 nếu đăng ký chức năng không thành công.
Ví dụ 1: Hàm atexit () hoạt động như thế nào?
#include #include using namespace std; void bye() ( cout << "Program Exiting Successfully"; ) int main() ( int x; x = atexit(bye); if (x != 0) ( cout << "Registration Failed"; exit(1); ) cout << "Registration successful" << endl; return 0; )
Khi bạn chạy chương trình, đầu ra sẽ là:
Đăng ký thành công Chương trình Thoát thành công
Nhiều hơn một chức năng có thể được đăng ký để thực thi khi kết thúc.
Nếu có nhiều hơn một hàm atexit được đăng ký, chúng sẽ được thực thi theo thứ tự ngược lại, tức là hàm đã đăng ký ít nhất được thực thi lúc đầu. Có thể đăng ký cùng một chức năng nhiều lần.
Số lượng các lệnh gọi hàm có thể được đăng ký với atexit () phụ thuộc vào việc triển khai thư viện cụ thể. Tuy nhiên, giới hạn tối thiểu là 32.
Ví dụ 2: Đăng ký nhiều hàm với atexit ()
#include #include using namespace std; void exit1() ( cout << "Exit Function 1" << endl; ) void exit2() ( cout << "Exit Function 2" << endl; ) void exit3() ( cout << "Exit Function 3" << endl; ) int main() ( int x1, x2, x3; /* Executed at last*/ x1 = atexit(exit1); x2 = atexit(exit2); /* Executed at first */ x3 = atexit(exit3); if ((x1 != 0) or (x2 != 0) or (x3 != 0)) ( cout << "Registration Failed"; exit(1); ) cout << "Registration successful" << endl; return 0; )
Khi bạn chạy chương trình, đầu ra sẽ là:
Đăng ký thành công Chức năng Thoát 3 Chức năng Thoát 2 Chức năng Thoát 1
Nếu một hàm đã đăng ký ném một ngoại lệ chưa được xử lý khi được gọi khi kết thúc, thì hàm cuối () sẽ được gọi.
Ví dụ 3: atexit () với hàm ném ngoại lệ không xử lý
#include #include using namespace std; void bye() ( cout << "Generates Exception"; int a = 5, b = 0; int x = a/b; /* Program will terminate here */ cout << "Division by zero"; ) int main() ( int x; x = atexit(bye); if (x != 0) ( cout << "Registration Failed"; exit(1); ) cout << "Registration successful" << endl; return 0; )
Khi bạn chạy chương trình, đầu ra sẽ là:
Đăng ký thành công Tạo ngoại lệ