Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Information:
catch(...)semantiken har ändrats sedan Visual C++ 7.1; strukturerade undantag (SEH) fångas inte längre
Anmärkningar
C4571 genereras för varje catch(...) block när du anger kompileringsalternativet /EHs .
När du anger kompilatoralternativet /EHscatch(...) fångar block inte upp strukturerade undantag. (Dividera med noll eller nullpekarexceptioner, till exempel). Ett catch(...) block fångar endast uttryckligen utlösta C++-undantag. Mer information finns i Undantagshantering.
Den här varningen är inaktiverad som standard. Aktivera den här varningen för att säkerställa att dina catch (...)-block inte fångar strukturerade undantag när du kompilerar med /EHs. Mer information finns i Kompilatorvarningar som är inaktiverade som standard.
Du kan lösa C4571 på något av följande sätt:
Kompilera med
/EHaom du fortfarande vill att blockencatch(...)ska fånga upp strukturerade undantag.Aktivera inte C4571 om du inte vill att blocken
catch(...)ska fånga upp strukturerade undantag, men du fortfarande vill användacatch(...)block. Du kan fortfarande fånga strukturerade undantag med hjälp av nyckelorden för strukturerad undantagshantering (__try,__exceptoch__finally). Men kom ihåg att när de kompileras med anropas/EHsdestruatorer bara när ett C++-undantag utlöses, inte när ett SEH-undantag inträffar.Ersätt
catch(...)block med catch-block för specifika C++-undantag, och om du vill kan du lägga till strukturerad undantagshantering runt C++-undantagshanteringen (__try,__exceptoch__finally). Mer information finns i Strukturerad undantagshantering (C/C++) och/EH(undantagshanteringsmodell).
Example
I följande exempel genereras 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
}