Połączenie wyjątków języka C (strukturalnych) i C++
Aby napisać bardziej przenośny kod, nie jest zalecane wykorzystanie strukturalnej obsługi wyjątków w programie w języku C++.Jednak czasami warto skompilować z /EHa i wymieszać strukturalne wyjątki z kodem źródłowym języka C++, więc potrzebne są funkcje obsługi obu rodzajów wyjątków.Ponieważ program obsługi wyjątków strukturalnych nie ma koncepcji obiektów lub wyjątków z określonym typem, nie może obsługiwać wyjątków generowanych przez kod języka C++; jednakże, programy obsługi C++ catch mogą obsługiwać wyjątki strukturalne.Jako taka, składnia obsługi wyjątków C++ (try, throw, catch) nie jest akceptowana przez kompilator C, ale składnia obsługi wyjątków strukturalnych (__try, __except, __finally) jest obsługiwana przez kompilator języka C++.
Zobacz _set_se_translator, aby uzyskać informacje na temat obsługi wyjątków strukturalnych jako wyjątków C++.
Po zmiksowaniu wyjątków strukturalnych z wyjątkami C++, należy pamiętać o następujących kwestiach:
Wyjątki C++ i wyjątki strukturalne nie mogą być mieszane w obrębie tej samej funkcji.
Programy obsługi zakończenia (bloki __finally) są zawsze wykonywane, nawet w trakcie wykonywania operacji unwind po zgłoszeniu wyjątku.
Obsługa wyjątków C++ może złapać i zachować semantykę operacji unwind we wszystkich modułach skompilowanych z opcją kompilatora /EH (opcja ta włącza semantykę operacji unwind).
Istnieją sytuacje, w których funkcje destruktora nie są wywoływane dla wszystkich obiektów.Na przykład, jeśli wyjątek strukturalny występuje podczas próby wywołania funkcji przez niezainicjowany wskaźnik funkcji i funkcja ta przyjmuje jako parametry obiekty, które zostały zbudowane przed wywołaniem, destruktory tych obiektów nie będą wywoływane podczas operacji unwind stosu.