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:
Sekcja strzeżony jest wykonywana.
Jeśli nie wystąpi wyjątek podczas wykonywania strzeżony sekcji, wykonywanie jest kontynuowane po instrukcji __except klauzuli.
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