Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
/EHakapcsolóval, ha továbbra is azt akarja, hogy acatch(...)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álnicatch(...). 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/EHssegí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
}