Udostępnij za pośrednictwem


Spróbuj-z wyjątkiem wyciągu (C)

Programu Microsoft

Try-z wyjątkiem instrukcja jest rozszerzenie Microsoft do języka C, który umożliwia aplikacjom przejęcie kontroli nad programem po wystąpieniu zdarzenia, które normalnie zakończyć wykonywanie.Takie zdarzenia są nazywane wyjątki i mechanizm, który zajmuje się wyjątków jest nazywany structured exception handling.

Wyjątki mogą być albo sprzętu lub oprogramowania systemem.Nawet w przypadku, gdy aplikacje nie można całkowicie odzyskać wyjątki sprzętowe lub programowe, structured exception handling umożliwia wyświetlanie informacji o błędach i pułapek wewnętrzny stan aplikacji w celu zdiagnozowania problemu.Jest to szczególnie użyteczne w przypadku sporadyczne problemy, których nie można łatwo odtworzyć.

Składnia

  • Spróbuj z wyjątkiem instrukcji:
    __try mieszanek oświadczenie

    __except ( wyrażenie ) mieszanek oświadczenie

Instrukcja złożona po __try klauzuli jest strzeżony sekcji.Instrukcja złożona po __except klauzuli jest obsługa wyjątków.Program obsługi określa zestaw akcji, które mają być podjęte, jeśli tworzony jest wyjątek podczas wykonywania strzeżony sekcji.Wykonanie postępuje w następujący sposób:

  1. Sekcja strzeżony jest wykonywana.

  2. Jeśli nie wystąpi wyjątek podczas wykonywania strzeżony sekcji, wykonywanie jest kontynuowane po instrukcji __except klauzuli.

  3. Jeśli wystąpi wyjątek podczas wykonywania strzeżony sekcji lub wszelkie rutynowe strzeżony sekcji wywołuje,__except jest obliczane wyrażenie i wartość zwracana określa sposób obsługi wyjątków.Istnieją trzy wartości:

    EXCEPTION_CONTINUE_SEARCHWyjątek nie jest rozpoznawany.Kontynuować wyszukiwanie górę stosu obsługi, najpierw zawierających try-z wyjątkiem sprawozdania, następnie obsługi z następny najwyższy priorytet.

    EXCEPTION_CONTINUE_EXECUTIONWyjątkiem jest rozpoznany, ale oddalone.Kontynuować działanie w punkcie, w którym wystąpił wyjątek.

    EXCEPTION_EXECUTE_HANDLERWyjątkiem jest rozpoznawany.Przenieść formant do procedury obsługi wyjątków przez wykonanie __except złożone oświadczenia, a następnie kontynuować działanie w punkcie wystąpił wyjątek.

Ponieważ __except wyrażenie jest oceniane jako c wyrażenie, jest ograniczone do pojedynczej wartości, operator wyrażenia warunkowe lub operatorem przecinka.Jeśli wymagane jest przetwarzanie bardziej rozległe, wyrażenie można wywołać procedury, które zwraca jeden z trzech wartości wymienionych powyżej.

[!UWAGA]

Structured exception handling współpracuje z plików źródłowych c i C++.Jednak to nie zaprojektowano dla języka C++.Aby zapewnić, że kod jest bardziej poręczny, korzystając z obsługi wyjątków C++.Wyjątek C++ mechanizmu obsługi jest również znacznie bardziej elastyczne, że można go obsługi wyjątków dowolnego typu.

[!UWAGA]

W przypadku programów C++ obsługę wyjątków C++ powinny zostać wykorzystane zamiast structured exception handling.Aby uzyskać więcej informacji, zobacz Obsługa wyjątków w Skorowidz języka C++.

Każdy rutynowych w aplikacji może mieć własne procedury obsługi wyjątków.__except Wyrażenie wykonuje się w zakresie __try ciała.Oznacza to, że ma dostęp do wszelkich zmiennych lokalnych zadeklarowanych tam.

__leave Słowo kluczowe jest nieprawidłowe w try-z wyjątkiem instrukcji bloku.Efekt __leave jest, aby przejść do końca try-z wyjątkiem bloku.Wykonanie wznawia działanie po zakończeniu procedury obsługi wyjątków.Chociaż goto instrukcji można osiągnąć ten sam wynik, goto instrukcja powoduje, że niekontrolowanej stosu.__leave Instrukcja jest bardziej efektywne, ponieważ nie obejmują niekontrolowanej stosu.

Zamykanie Spróbuj-z wyjątkiem za pomocą instrukcji longjmp run-time, funkcja jest uważany za nieprawidłowego przerwania pracy.Nie jest dozwolone, aby przeskoczyć do __try instrukcji, ale prawne, aby przejść o jeden.Procedury obsługi wyjątków nie jest wywoływana, gdy proces jest zabitych w środku wykonywanie try-z wyjątkiem instrukcji.

Przykład

Oto przykład procedury obsługi wyjątków i procedury obsługi sytuacji krańcowych.Zobacz instrukcji try-finally uzyskać więcej informacji o krańcowych.

.
.
.
puts("hello");
__try{
   puts("in try");
   __try{
      puts("in try");
      RAISE_AN_EXCEPTION();
   }__finally{
      puts("in finally");
   }
}__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){
   puts("in except");
}
puts("world");

Jest to wynikiem przykład komentarz dodany po prawej stronie:

hello
in try              /* fall into try                     */
in try              /* fall into nested try                */
in filter           /* execute filter; returns 1 so accept  */
in finally          /* unwind nested finally                */
in except           /* transfer control to selected handler */
world               /* flow out of handler                  */

KONIEC Microsoft szczególne

Zobacz też

Informacje

Spróbuj-z wyjątkiem wyciągu