C4571 (poziom 4) ostrzeżenia kompilatora
Informacyjna: semantyki catch(...) w porównaniu z Visual C++ 7.1; wyjątki strukturalne (SEH) nie jest już zostały złowione
C4571 jest generowany dla każdego bloku catch(...) podczas kompilacji z /EHs.
Podczas kompilowania z /EHs, blok catch(...) nie będzie przechwytywać structured exception (dzielenie przez zero, wskaźnik zerowy, na przykład); catch(...) blok będzie tylko połów jawnie thrown, wyjątki C++.Aby uzyskać więcej informacji, zobacz Obsługa wyjątków w programie Visual C++.
To ostrzeżenie jest domyślnie wyłączona.Włącz to ostrzeżenie, aby zapewnić, że podczas kompilacji z /EHs nie jest planowane połowu wyjątki strukturalne na bloki catch (...).Zobacz Ostrzeżenia kompilatora, które są domyślnie wyłączone Aby uzyskać więcej informacji.
C4571 można rozwiązać na jeden z następujących sposobów,
Kompiluj z /EHa , jeśli nadal chcesz swoje bloki catch(...), aby przechwytywać wyjątków strukturalnych.
Nie włączaj C4571, jeśli nie chcesz, aby Twoje bloki catch(...), aby przechwytywać wyjątków strukturalnych, ale nadal chcesz użyć bloków catch(...).Nadal można wychwycić wyjątki strukturalne, używając strukturalnej obsługi słowa kluczowe wyjątków (__try, __except, i __finally).Pamiętaj jednak, gdy kompilowany /EHs destruktory tylko zostanie wywołana, gdy wyrzucany jest wyjątek C++, nie w przypadku, gdy wystąpi wyjątek SEH.
Zastąp blok catch(...) bloki catch, szczególne wyjątki C++ i opcjonalnie Dodaj strukturalnej obsługi wokół obsługę wyjątków C++ wyjątków (__try, __except, i __finally).Zobacz Strukturalnej obsługi (C++) wyjątków Aby uzyskać więcej informacji.
Zobacz /Eh (Model obsługi wyjątków) Aby uzyskać więcej informacji.
Przykład
Poniższy przykład generuje C4571.
// C4571.cpp
// compile with: /EHs /W4 /c
#pragma warning(default : 4571)
int main() {
try {
int i = 0, j = 1;
j /= i; // this will throw a SE (divide by zero)
}
catch(...) {} // C4571 warning
}