Memahami __cuba, cuba/tangkap/akhirnya dalam C
Dalam C , blok try/catch/finally biasanya digunakan untuk pengendalian pengecualian . Walau bagaimanapun, terdapat sintaks alternatif dengan garis bawah berganda, __try, yang khusus untuk Windows.
Bila Menggunakan __try
Pada Windows, pengendalian pengecualian dilaksanakan melalui Structured Pengendalian Pengecualian (SEH). Apabila menyasarkan Windows dengan pengkompil MSVC, sintaks __try boleh digunakan untuk menangkap pengecualian SEH.
Pengecualian SEH dan C
Pengkompil MSVC menjana kod yang memetakan pengecualian C kepada infrastruktur SEH, menggunakan kod pengecualian 0xe06d7363 ("msc"). Ini membolehkan pemusnah C dipanggil apabila pengecualian SEH dinaikkan.
Pengoptimuman Pengkompil untuk Pemusnah
Pengkompil MSVC mengoptimumkan kod untuk mengelakkan menjana kod pemusnah jika terdapat tiada pernyataan lontaran dalam jangka hayat objek. Pengoptimuman ini boleh ditindas dengan menggunakan pilihan penyusunan /EHa, yang diperlukan untuk menangkap semua pengecualian SEH secara konsisten.
Jenis Pengecualian SEH
SEH mempunyai banyak jenis pengecualian, termasuk yang ditakrifkan oleh sistem pengendalian dan yang digunakan oleh aplikasi tertentu. Pengecualian terurus, seperti pengecualian .NET, gunakan kod pengecualian 0xe0434f4d ("com").
__cuba, __kecuali dan __akhirnya
Untuk menangkap pengecualian SEH, __cuba digunakan bersama dengan __except, yang bertindak seperti blok tangkapan C tetapi dengan lebih banyak keupayaan. __akhirnya membenarkan kod dilaksanakan selepas pengendalian pengecualian.
Kod Contoh
Kod yang disediakan menunjukkan penggunaan __try, __except dan __akhirnya untuk menangkap kedua-dua pengecualian SEH (disebabkan oleh mengakses penuding nol) dan pengecualian C (disebabkan oleh melontar integer).
Output menunjukkan bahawa pemusnah dipanggil untuk kedua-dua pengecualian, dan __except berjaya menangkap pengecualian.
Atas ialah kandungan terperinci Apakah Tujuan dan Pelaksanaan __try dalam C pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!