Obsługa wyjątków w MSVC

Wyjątek jest warunkiem błędu, możliwie poza kontrolą programu, który uniemożliwia kontynuowanie wykonywania programu wzdłuż zwykłej ścieżki. Niektóre operacje, w tym tworzenie obiektów, dane wejściowe/wyjściowe pliku i wywołania funkcji z innych modułów, są potencjalnymi źródłami wyjątków, nawet jeśli program działa poprawnie. Niezawodny kod przewiduje wyjątki i je obsługuje. Aby wykryć błędy logiki, użyj asercji, a nie wyjątków (zobacz Używanie asercji).

Rodzaje wyjątków

Kompilator języka Microsoft C++ (MSVC) obsługuje trzy rodzaje obsługi wyjątków:

  • Obsługa wyjątków w języku C++

    W przypadku większości programów języka C++ należy użyć obsługi wyjątków języka C++. Jest bezpieczny pod względem typu i gwarantuje, że destruktory obiektów są wywoływane podczas odwijania stosu.

  • Obsługa wyjątków strukturalnych

    System Windows dostarcza własny mechanizm wyjątków, nazywany obsługą wyjątków strukturalnych (SEH). Nie zaleca się programowania W języku C++ ani MFC. Używaj SEH tylko w programach innych niż MFC C.

  • Wyjątki MFC

    Od wersji 3.0 MFC używa wyjątków języka C++. Nadal obsługuje starsze makra obsługi wyjątków, które są podobne do wyjątków języka C++ w postaci. Aby uzyskać porady dotyczące mieszania makr MFC i wyjątków języka C++, zobacz Wyjątki: Używanie makr MFC i wyjątków języka C++.

Użyj /EH opcji kompilatora, aby określić model obsługi wyjątków do użycia w projekcie C++. Obsługa wyjątków standardowego języka C++ (/EHsc) jest domyślna w nowych projektach języka C++ w programie Visual Studio.

Nie zalecamy łączenia mechanizmów obsługi wyjątków. Na przykład nie używaj wyjątków języka C++ z obsługą wyjątków strukturalnych. Korzystanie z obsługi wyjątków języka C++ sprawia, że kod jest bardziej przenośny i umożliwia obsługę wyjątków dowolnego typu. Aby uzyskać więcej informacji na temat wad obsługi wyjątków strukturalnych, zobacz Obsługa wyjątków strukturalnych.

W tej sekcji

Zobacz też

Dokumentacja języka
C++ x64 obsługa
wyjątków obsługi wyjątków (C++/CLI i C++/CX)