Megosztás a következőn keresztül:


Fordító figyelmeztetése (4. szint) C4571

Információ: catch(...) a szemantikák megváltoztak a Visual C++ 7.1 óta; a strukturált kivételkezelés (SEH) már nem kerül elkapásra

Megjegyzések

A C4571 minden catch(...) blokkhoz létrejön a /EHs fordítóbeállítás megadásakor.

A kompiláló beállítás /EHs megadásakor a catch(...) blokkok nem kapnak el strukturált kivételeket. (Osztás nullával vagy nullmutató-kivétel, például.) A catch(...) blokk csak az explicit módon dobott C++ kivételeket rögzíti. További információ: Kivételkezelés.

Ez a figyelmeztetés alapértelmezés szerint ki van kapcsolva. Kapcsolja be ezt a figyelmeztetést, hogy a blokkokkal történő /EHscatch (...) fordításkor ne legyenek strukturált kivételek. További információ: A Fordító alapértelmezés szerint ki van kapcsolva.

A C4571 a következő módok egyikével oldható fel:

  • Fordítsa le /EHa kapcsolóval, ha továbbra is azt akarja, hogy a catch(...) blokkok strukturált kivételeket kapjanak el.

  • Ne engedélyezze a C4571-et, ha nem szeretné, hogy a catch(...) blokkok strukturált kivételeket észleljenek, de továbbra is blokkokat szeretne használni catch(...) . A strukturált kivételeket továbbra is észlelheti a strukturált kivételkezelési kulcsszavak (__tryés __except__finally) használatával. Ne feledje azonban, hogy fordításkor, amikor a /EHs segítségével történik fordítás, a destruktorok csak abban az esetben lesznek meghívva, ha C++ kivétel történik, SEH-kivétel esetén nem.

  • Cserélje le a catch(...) blokkokat a C++-kivételek fogási blokkjaira, és opcionálisan adjon hozzá strukturált kivételkezelést a C++ kivételkezelés köré (__try, __except, és __finally). További információ: Strukturált kivételkezelés (C/C++) és /EH (Kivételkezelési modell).

Example

Az alábbi példa C4571-et hoz létre.

// 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
}