Rumah >pembangunan bahagian belakang >C++ >Bilakah Anda Harus Menggunakan `__try` dan `__except` Daripada `try` dan `tangkap` dalam C ?
__cuba dan cuba/tangkap/akhirnya dalam C
Dalam C , pengendalian pengecualian terutamanya dicapai melalui blok try/catch/finally. Walau bagaimanapun, terdapat perintah yang kurang dikenali yang bermula dengan garis bawah berganda, seperti __try. Artikel ini bertujuan untuk menjelaskan apabila garis bawah ini diperlukan.
Pada sistem Windows, pengecualian disokong melalui Pengendalian Pengecualian Berstruktur (SEH), mekanisme peringkat sistem pengendalian. Penyusun biasanya menggunakan infrastruktur SEH ini untuk pelaksanaan pengecualian C. Kata kunci lontaran dan tangkap hanya mengendalikan pengecualian C, dengan kod pengecualian SEH yang sepadan ialah 0xe06d7363.
Untuk mengendalikan pengecualian SEH, program C memerlukan penggunaan kata kunci __try bukan standard. Selain itu, __except adalah serupa dengan tangkapan tetapi membenarkan untuk menentukan penapis pengecualian untuk menentukan sama ada pengecualian aktif harus dikendalikan. __akhirnya membolehkan pelaksanaan kod selepas pengendalian pengecualian.
Untuk menggambarkan konsep ini, pertimbangkan contoh atur cara di bawah:
#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; } void testProcessorFault() { Example e; int* p = 0; *p = 42; } void testCppException() { Example e; throw 42; } int main() { __try { testProcessorFault(); } __except(filterException(GetExceptionCode(), GetExceptionInformation())) { std::cout << "caught" << std::endl; } __try { testCppException(); } __except(filterException(GetExceptionCode(), GetExceptionInformation())) { std::cout << "caught" << std::endl; } return 0; }
Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan `__try` dan `__except` Daripada `try` dan `tangkap` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!