Udostępnij za pośrednictwem


Mieszanie C (struktura) i wyjątki C++

Jeśli chcesz napisać kod przenośny, używając strukturalnej obsługi wyjątków w program w języku C++ nie jest zalecane.Jednak czasami warto skompilować z /EHa i wymieszać wyjątki strukturalne i kodu źródłowego języka C++ oraz potrzebę niektórych funkcji obsługi oba rodzaje wyjątki.Ponieważ obsługa structured exception ma koncepcji obiektów lub wpisany wyjątki, nie może obsłużyć wyjątki generowane przez kodu C++; Jednakże C++ połowu obsługi może obsłużyć wyjątki strukturalne.Jako takie, Obsługa składni wyjątków C++ (Spróbuj, throw, połowu) nie jest akceptowane przez kompilator C, ale strukturalnej składni obsługi wyjątków (__try, __except, __finally) jest obsługiwana przez kompilator C++.

Zobacz _set_se_translator Aby uzyskać informacje dotyczące obsługi wyjątki strukturalne jako wyjątki C++.

Jeśli użytkownik wymieszać strukturę i wyjątki C++ pamiętać o następujących kwestiach:

  1. Wyjątki C++ a wyjątki strukturalne nie może być mieszane w obrębie tej samej funkcji.

  2. Procedury obsługi sytuacji krańcowych (__finally bloków) są zawsze wykonywane, nawet w trakcie niekontrolowanej po jest wyjątek.

  3. Obsługa wyjątków C++ może przechwycić i Zachowaj relaks semantykę we wszystkich modułach skompilowany z /EH opcję kompilatora (Ta opcja umożliwia relaks semantykę).

  4. Może to być sytuacje, w których destruktora funkcje nie są nazywane dla wszystkich obiektów.Na przykład jeśli structured exception występuje podczas próby nawiązania funkcji wywołania poprzez do niezainicjowanego wskaźnika funkcji i że funkcja przyjmuje jako obiekty parametry, które zostały zbudowane przed wywołaniem, te obiekty nie będą miały swoich destruktorów wywoływana podczas unwind stosu.

Co chcesz wiedzieć więcej?

Zobacz też

Informacje

Obsługa wyjątków C++