Share via


set_unexpected (CRT)

Menginstal fungsi penghentian Anda sendiri untuk dipanggil oleh unexpected.

Sintaks

unexpected_function set_unexpected( unexpected_function unexpFunction );

Parameter

unexpFunction
Penunjuk ke fungsi yang Anda tulis untuk menggantikan unexpected fungsi.

Nilai hasil

Mengembalikan penunjuk ke fungsi penghentian sebelumnya yang didaftarkan oleh _set_unexpected sehingga fungsi sebelumnya dapat dipulihkan nanti. Jika tidak ada fungsi sebelumnya yang ditetapkan, nilai pengembalian dapat digunakan untuk memulihkan perilaku default; nilai ini mungkin NULL.

Keterangan

Fungsi set_unexpected ini diinstal unexpFunction sebagai fungsi yang dipanggil oleh unexpected. unexpected tidak digunakan dalam implementasi penanganan pengecualian C++ saat ini. unexpected_function Jenis didefinisikan dalam EH. H sebagai penunjuk ke fungsi tak terduga yang ditentukan pengguna, unexpFunction yang mengembalikan void. Fungsi kustom unexpFunction Anda tidak boleh kembali ke pemanggilnya.

typedef void ( *unexpected_function )( );

Secara default, unexpected memanggil terminate. Anda dapat mengubah perilaku default ini dengan menulis fungsi penghentian Anda sendiri dan memanggil set_unexpected dengan nama fungsi Anda sebagai argumennya. unexpected memanggil fungsi terakhir yang diberikan sebagai argumen ke set_unexpected.

Tidak seperti fungsi penghentian kustom yang diinstal oleh panggilan ke set_terminate, pengecualian dapat dilemparkan dari dalam unexpFunction.

Di lingkungan multithreaded, fungsi tak terduga dipertahankan secara terpisah untuk setiap utas. Setiap utas baru perlu menginstal fungsi tak terduganya sendiri. Dengan demikian, setiap utas bertanggung jawab atas penanganannya sendiri yang tidak terduga.

Dalam implementasi Microsoft saat ini dari penanganan pengecualian C++, unexpected panggilan terminate secara default dan tidak pernah dipanggil oleh pustaka run-time penanganan pengecualian. Tidak ada keuntungan khusus untuk memanggil unexpected daripada terminate.

Ada satu set_unexpected handler untuk semua DLL atau EXE yang ditautkan secara dinamis; bahkan jika Anda memanggil set_unexpected handler Anda dapat digantikan oleh yang lain atau Anda mengganti handler yang ditetapkan oleh DLL atau EXE lain.

Persyaratan

Rutin Header yang diperlukan
set_unexpected <eh.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Baca juga

Rutinitas penanganan pengecualian
abort
_get_unexpected
set_terminate
terminate
unexpected