Mencampur pengecualian C (terstruktur) dan C++
Jika Anda ingin menulis kode portabel, penggunaan penanganan pengecualian terstruktur (SEH) dalam program C++ tidak disarankan. Namun, Terkadang Anda mungkin ingin mengkompilasi menggunakan /EHa
dan mencampur pengecualian terstruktur dan kode sumber C++, dan memerlukan beberapa fasilitas untuk menangani kedua jenis pengecualian. Karena handler pengecualian terstruktur tidak memiliki konsep objek atau pengecualian yang diketik, penangan tidak dapat menangani pengecualian yang dilemparkan oleh kode C++. Namun, handler C++ catch
dapat menangani pengecualian terstruktur. Sintaks penanganan pengecualian C++ (try
, , ) catch
tidak diterima oleh pengkompilasi C, tetapi sintaks penanganan pengecualian terstruktur (__try
, __except
, ) __finally
didukung oleh pengkompilasi throw
C++.
Lihat _set_se_translator
untuk informasi tentang cara menangani pengecualian terstruktur sebagai pengecualian C++.
Jika Anda mencampur pengecualian terstruktur dan C++, ketahui potensi masalah ini:
Pengecualian C++ dan pengecualian terstruktur tidak dapat dicampur dalam fungsi yang sama.
Penghentian handler (
__finally
blok) selalu dijalankan, bahkan selama melepas lelah setelah pengecualian dilemparkan.Penanganan pengecualian C++ dapat menangkap dan mempertahankan semantik unwind di semua modul yang dikompilasi dengan
/EH
opsi kompilator, yang memungkinkan semantik unwind.Mungkin ada beberapa situasi di mana fungsi destruktor tidak dipanggil untuk semua objek. Misalnya, pengecualian terstruktur dapat terjadi saat mencoba melakukan panggilan fungsi melalui penunjuk fungsi yang tidak diinisialisasi. Jika parameter fungsi adalah objek yang dibangun sebelum panggilan, destruktor objek tersebut tidak dipanggil selama stack unwind.
Langkah berikutnya
Menggunakan
setjmp
ataulongjmp
dalam program C++Lihat informasi selengkapnya tentang penggunaan
setjmp
danlongjmp
dalam program C++.Menangani pengecualian terstruktur di C++
Lihat contoh cara Anda dapat menggunakan C++ untuk menangani pengecualian terstruktur.
Baca juga
Praktik terbaik C++ modern untuk pengecualian dan penanganan kesalahan
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk