C Try/Catch/Akhirnya Sekat dan Kata Kunci __try
Structured Exception Handling (SEH) ialah mekanisme pengendalian pengecualian peringkat sistem pengendalian disokong oleh Windows. Pengkompil untuk Windows biasanya menggunakan SEH untuk melaksanakan pengecualian C.
Sementara kata kunci C membuang dan menangkap secara eksklusif mengendalikan pengecualian C, pengkompil Microsoft Visual C (MSVC) menyediakan kata kunci __try dan __kecuali bukan standard untuk mengendalikan pengecualian SEH.
__try Block:
Blok __try bukan standard mentakrifkan skop di mana pengecualian boleh berlaku, sama seperti blok try dalam C . Ia diikuti oleh __except dan __finally blok.
__except Blok:
Blok __except adalah serupa dengan blok tangkapan dalam C tetapi menawarkan lebih fleksibiliti. Ia mempunyai ungkapan penapis pengecualian yang menilai sama ada pengecualian aktif harus dikendalikan.
__akhirnya Sekat:
Sekat __akhirnya mengandungi kod yang dijalankan selepas sebarang pengendalian pengecualian. Ia serupa dengan blok akhirnya dalam C#, tetapi tidak setara secara langsung dalam standard C .
Kes Penggunaan untuk Blok __try:
Pengecualian SEH boleh termasuk yang dijana oleh operasi sistem, kod antara operasi menggunakan SEH atau kod terurus menggunakan kod pengecualian ".NET". Untuk menangkap pengecualian ini dalam C , blok __try mesti digunakan bersama dengan blok __except.
Contoh Program:
Program contoh menunjukkan pengecualian SEH dan cara pemusnah C boleh dipanggil semasa pengecualian SEH dilepaskan.
#include <windows.h> #include <iostream> class Example { public: ~Example() { std::cout << "destructed" << std::endl; } }; int filterException(int code, PEXCEPTION_POINTERS ex) { std::cout << "Filtering " << std::hex << code << std::endl; return EXCEPTION_EXECUTE_HANDLER; } int main() { __try { Example e; int* p = 0; *p = 42; // intentially generating a processor fault } __except (filterException(GetExceptionCode(), GetExceptionInformation())) { std::cout << "caught" << std::endl; } return 0; }
Output:
Filtering c0000005 destructed caught
Atas ialah kandungan terperinci Bila dan Mengapa Anda Perlu Menggunakan Kata Kunci __try dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!