Dela via


Kompilatorvarning (nivå 4) C4571

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 /EHa om du fortfarande vill att blocken catch(...) 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ända catch(...) 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
}