Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Информационные:
catch(...)семантика изменилась, так как Visual C++ 7.1; структурированные исключения (SEH) больше не перехватываются
C4571 создается для каждого catch(...) блока при указании параметра компилятора /EHs .
Замечания
При указании параметра catch(...) компилятора /EHs блоки не перехватывает структурированные исключения. (Например, деление на ноль или исключение указателя NULL. Блок catch(...) перехватывает только явные исключения C++. Дополнительные сведения см. в разделе Обработка исключений.
Это предупреждение отключено по умолчанию. Включите это предупреждение, чтобы гарантировать, что при компиляции с /EHs catch (...) блоками не перехватывает структурированные исключения. Дополнительные сведения см. в разделе "Предупреждения компилятора", отключенные по умолчанию.
Вы можете разрешить C4571 одним из следующих способов:
/EHaСкомпилируйте, если блоки по-прежнему хотятcatch(...)перехватывать структурированные исключения.Не включите C4571, если вы не хотите
catch(...), чтобы блоки перехватили структурированные исключения, но вы по-прежнему хотите использоватьcatch(...)блоки. Вы по-прежнему можете перехватывать структурированные исключения с помощью ключевых слов обработки структурированных исключений (__try,__exceptи__finally). Но помните, что при компиляции/EHsдеструкторы вызываются только при возникновении исключения C++, а не при возникновении исключения SEH.Замените
catch(...)блоки catch для определенных исключений C++ и при необходимости добавьте структурированную обработку исключений вокруг обработки исключений C++ (__tryи__finally__except). Дополнительные сведения см. в разделе "Структурированная обработка исключений" (C/C++) и/EH(модель обработки исключений).
Пример
Следующий пример приводит к возникновению ошибки 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
}