Bagikan melalui


Compiler Warning (level 4) C4571

Informasi: catch(...) semantik berubah sejak Visual C++ 7.1; pengecualian terstruktur (SEH) tidak lagi tertangkap

C4571 dihasilkan untuk setiap catch(...) blok saat Anda menentukan /EHs opsi pengkompilasi.

Keterangan

Saat Anda menentukan /EHs opsi pengkompilasi, catch(...) blok tidak menangkap pengecualian terstruktur. (Bagi dengan nol, atau pengecualian penunjuk null, misalnya.) Blok catch(...) hanya menangkap pengecualian C++ yang dilemparkan secara eksplisit. Untuk informasi selengkapnya, lihat Penanganan Pengecualian.

Peringatan ini nonaktif secara default. Aktifkan peringatan ini untuk memastikan bahwa saat Anda mengkompilasi dengan /EHs blok Anda catch (...) tidak menangkap pengecualian terstruktur. Untuk informasi selengkapnya, lihat Peringatan pengkompilasi yang nonaktif secara default.

Anda dapat mengatasi C4571 dengan salah satu cara berikut:

  • Kompilasi dengan /EHa jika Anda masih ingin blok Anda catch(...) menangkap pengecualian terstruktur.

  • Jangan aktifkan C4571 jika Anda tidak ingin blok Anda catch(...) menangkap pengecualian terstruktur, tetapi Anda masih ingin menggunakan catch(...) blok. Anda masih dapat menangkap pengecualian terstruktur menggunakan kata kunci penanganan pengecualian terstruktur (__try, , __exceptdan __finally). Tetapi ingat, ketika dikompilasi menggunakan /EHs, destruktor hanya dipanggil ketika pengecualian C++ dilemparkan, bukan ketika pengecualian SEH terjadi.

  • Ganti catch(...) blok dengan blok tangkapan untuk pengecualian C++ tertentu, dan secara opsional, tambahkan penanganan pengecualian terstruktur di sekitar penanganan pengecualian C++ (__try, __except, dan __finally). untuk informasi selengkapnya, lihat Penanganan Pengecualian Terstruktur (C/C++) dan /EH (Model Penanganan Pengecualian).

Contoh

Sampel berikut menghasilkan 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
}