Sintaks Exception-Handler

Kata kunci __try dan __except digunakan untuk membuat handler pengecualian berbasis bingkai. Contoh berikut menunjukkan struktur handler pengecualian.

__try 
{
    // guarded body of code 
 
} 
__except (filter-expression) 
{ 
    // exception-handler block 
 
}

Perhatikan bahwa blok __try dan blok handler pengecualian memerlukan kurung kurawal ({}). Menggunakan pernyataan goto untuk melompat ke dalam isi blok __try atau ke blok handler pengecualian tidak diizinkan. Aturan ini berlaku untuk penangan pengecualian dan penangan penghentian.

Blok __try berisi isi kode yang dijaga yang dilindungi oleh handler pengecualian. Fungsi dapat memiliki sejumlah penangan pengecualian, dan pernyataan penanganan pengecualian ini dapat disarangkan dalam fungsi yang sama atau dalam fungsi yang berbeda. Jika pengecualian terjadi dalam blok __try, sistem mengambil kontrol dan memulai pencarian untuk handler pengecualian. Untuk deskripsi terperinci tentang pencarian ini, lihat Penanganan Pengecualian.

Handler pengecualian hanya menerima pengecualian yang terjadi dalam satu utas. Ini berarti bahwa jika blok __try berisi panggilan ke fungsi CreateProcess atau CreateThread, pengecualian yang terjadi dalam proses atau utas baru tidak dikirim ke handler ini.

Sistem mengevaluasi ekspresi filter dari setiap handler pengecualian yang menjaga kode di mana pengecualian terjadi sampai pengecualian ditangani atau tidak ada lagi handler. Ekspresi filter harus dievaluasi sebagai salah satu dari tiga nilai berikut.

Nilai Arti
EXCEPTION_EXECUTE_HANDLER Sistem mentransfer kontrol ke handler pengecualian, dan eksekusi berlanjut di bingkai tumpukan tempat handler ditemukan.
EXCEPTION_CONTINUE_SEARCH Sistem terus mencari handler.
EXCEPTION_CONTINUE_EXECUTION Sistem menghentikan pencariannya untuk handler dan mengembalikan kontrol ke titik di mana pengecualian terjadi. Jika pengecualian tidak dapat dilanjutkan, ini menghasilkan pengecualian EXCEPTION_NONCONTINUABLE_EXCEPTION.

 

Ekspresi filter dievaluasi dalam konteks fungsi tempat handler pengecualian berada, meskipun pengecualian mungkin terjadi dalam fungsi yang berbeda. Ini berarti bahwa ekspresi filter dapat mengakses variabel lokal fungsi. Demikian pula, blok exception-handler dapat mengakses variabel lokal fungsi tempatnya berada.

Untuk contoh selengkapnya, lihat Menggunakan Handler Pengecualian.

Untuk informasi selengkapnya tentang ekspresi filter dan fungsi filter, lihat Penanganan Pengecualian berbasis Bingkai.