Share via


Derleyici Uyarısı (düzey 4) C4571

Bilgi: catch(...) Visual C++ 7.1'den bu yana semantik değişti; yapılandırılmış özel durumlar (SEH) artık yakalanmadı

Derleyici seçeneğini belirttiğinizde /EHs her catch(...) blok için C4571 oluşturulur.

Açıklamalar

Derleyici seçeneğini belirttiğinizde /EHs bloklar catch(...) yapılandırılmış özel durumları yakalamaz. (Sıfıra bölün veya örneğin null işaretçi özel durumları.) Bir catch(...) blok yalnızca açıkça oluşan C++ özel durumlarını yakalar. Daha fazla bilgi için bkz . Özel Durum İşleme.

Bu uyarı varsayılan olarak kapalıdır. Bloklarınızla /EHscatch (...) derleme yaptığınızda yapılandırılmış özel durumları yakalamadığından emin olmak için bu uyarıyı açın. Daha fazla bilgi için bkz . Varsayılan olarak kapalı olan derleyici uyarıları.

C4571'i aşağıdaki yollardan biriyle çözebilirsiniz:

  • Bloklarınızın catch(...) yapılandırılmış özel durumları yakalamasını istiyorsanız ile /EHa derleyin.

  • Bloklarınızın catch(...) yapılandırılmış özel durumları yakalamasını istemiyorsanız ancak yine de blokları kullanmak catch(...) istiyorsanız C4571'i etkinleştirmeyin. Yapılandırılmış özel durum işleme anahtar sözcüklerini (__try, __exceptve __finally) kullanarak yapılandırılmış özel durumları yakalamaya devam edebilirsiniz. Ancak, kullanılarak /EHsderlendiğinde yıkıcılar yalnızca bir C++ özel durumu oluştuğunda çağrılır, SEH özel durumu oluştuğunda çağrılmaz.

  • Belirli C++ özel durumları için blokları catch bloklarıyla değiştirin catch(...) ve isteğe bağlı olarak C++ özel durum işlemesinin (__try, __exceptve __finally) etrafına yapılandırılmış özel durum işleme ekleyin. Daha fazla bilgi için bkz . Yapılandırılmış Özel Durum İşleme (C/C++) ve /EH (Özel Durum İşleme Modeli).

Örnek

Aşağıdaki örnek C4571 oluşturur.

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