Heim > Backend-Entwicklung > C++ > Wann und warum sollten Sie das Schlüsselwort __try in C verwenden?

Wann und warum sollten Sie das Schlüsselwort __try in C verwenden?

Mary-Kate Olsen
Freigeben: 2024-11-06 13:16:02
Original
815 Leute haben es durchsucht

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

C Try/Catch/Finally-Blöcke und das Schlüsselwort __try

Structured Exception Handling (SEH) ist der Ausnahmebehandlungsmechanismus auf Betriebssystemebene Unterstützt von Windows. Compiler für Windows verwenden in der Regel SEH, um C-Ausnahmen zu implementieren.

Während die C-Schlüsselwörter „throw“ und „catch“ ausschließlich C-Ausnahmen verarbeiten, stellt der Microsoft Visual C (MSVC)-Compiler nicht standardmäßige Schlüsselwörter __try und __exclusive zur Behandlung von SEH-Ausnahmen bereit.

__try-Block:

Der nicht standardmäßige __try-Block definiert den Bereich, in dem eine Ausnahme auftreten kann, genau wie ein try-Block in C. Es folgen die Blöcke __exclusive und __finally.

__exclusive-Block:

Der __exclusive-Block ähnelt einem Catch-Block in C, bietet jedoch mehr Flexibilität. Es verfügt über einen Ausnahmefilterausdruck, der auswertet, ob eine aktive Ausnahme behandelt werden soll.

__finally-Block:

Der __finally-Block enthält Code, der nach jeder Ausnahmebehandlung ausgeführt wird. Es ähnelt einem „finally“-Block in C#, ist aber nicht direkt äquivalent in Standard-C.

Anwendungsfall für __try-Blöcke:

SEH-Ausnahmen können solche umfassen, die durch den Betrieb generiert werden System, zusammenarbeitender Code mit SEH oder verwalteter Code mit dem Ausnahmecode „.NET“. Um diese Ausnahmen in C abzufangen, müssen __try-Blöcke zusammen mit __exclusive-Blöcken verwendet werden.

Beispielprogramm:

Das Beispielprogramm demonstriert SEH-Ausnahmen und wie C-Destruktoren sein können Wird während einer SEH-Ausnahme aufgerufen Abwickeln.

#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;
}
Nach dem Login kopieren

Ausgabe:

Filtering c0000005
destructed
caught
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWann und warum sollten Sie das Schlüsselwort __try in C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage