Bila dan Mengapa Anda Perlu Menggunakan Kata Kunci __try dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-11-06 13:16:02
asal
717 orang telah melayarinya

When and Why Should You Utilize the __try Keyword in C  ?

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;
}
Salin selepas log masuk

Output:

Filtering c0000005
destructed
caught
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!