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 /EHs
catch (...)
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ı kullanmakcatch(...)
istiyorsanız C4571'i etkinleştirmeyin. Yapılandırılmış özel durum işleme anahtar sözcüklerini (__try
,__except
ve__finally
) kullanarak yapılandırılmış özel durumları yakalamaya devam edebilirsiniz. Ancak, kullanılarak/EHs
derlendiğ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
,__except
ve__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
}