/eh (özel durum işleme modeli)
Özel durum, kapsam dışına gidecek C++ nesneleri yok eder ve derleyici tarafından kullanılmak üzere özel durum modelini belirtir. /EH Belirtilmezse, derleyici yapılandırılmış yakalar ve C++ özel durumlar, ancak yüklemez özel durum, kapsam dışına gidecek C++ nesneleri yok.
/EH{s|a}[c][-]
Değişkenler
a
O (yapısal) catches zaman uyumsuz ve zaman uyumlu (C++) özel durumlar istisna işleme modeli.s
C++ özel durumları yakalar ve derleyici yaptığınızı varsayar söyler özel durum işleme modeli extern c işlevleri bir özel durum atar.c
İle kullanıldığında, s (/EHsc), C++ özel durumları yakalar ve derleyici yaptığınızı varsayar söyler extern c işlevleri asla bir C++ özel durum. /EHcaeşittir /EHa.
Notlar
Use /EHs zaman uyumlu özel durum işleme modeli (C++ özel durum işleme özel durumları işleme yapılandırılmış özel durum) belirtmek için. Kullanırsanız, /EHs, sonra da kendi catch yan tümcesi olmayan zaman uyumsuz özel durumları yakalamak. Zaman uyumsuz durum işleniyor olsa bile, aynı zamanda, zaman uyumsuz durum oluşturulduğunda kapsam içindeki tüm nesneler yok edilir değil. Altında /EHs, catch(...) yalnızca catch C++ özel durumlar olacaktır. Erişim ihlalleri ve System.Exception özel durumlar yakalanmadı.
Use /EHa zaman uyumsuz özel durum işleme modeli (C++ özel durum işleme özel durumları işleme yapılandırılmış özel durum dışında) belirtmek için. /EHaDerleyici değil en iyi çünkü daha az bir performant görüntüsü neden olabilir bir try derleyici bir throw görmez bile olarak titizlikle engelleyin.
Use /EHa dışında bir şey ile harekete geçirilen bir özel durumu yakalamak istiyorsanız, bir throw. Aşağıdaki örnek, bir özel durum oluşturur:
// compiler_options_EHA.cpp
// compile with: /EHa
#include <iostream>
#include <excpt.h>
using namespace std;
void fail() { // generates SE and attempts to catch it using catch(...)
try {
int i = 0, j = 1;
j /= i; // This will throw a SE (divide by zero).
printf("%d", j);
}
catch(...) { // catch block will only be executed under /EHa
cout<<"Caught an exception in catch(...)."<<endl;
}
}
int main() {
__try {
fail();
}
// __except will only catch an exception here
__except(EXCEPTION_EXECUTE_HANDLER) {
// if the exception was not caught by the catch(...) inside fail()
cout << "An exception was caught in __except." << endl;
}
}
/EHc Seçeneğini gerektirir /EHs veya /EHa belirtilir. Kullanarak /CLR (ortak dil çalışma zamanı derleme) anlamına gelir /EHa (/clr /EHa gereksiz olur). Derleyici bir hata oluşturur /EHs[c] sonra kullanılan /clr. En iyi duruma getirmeleri bu davranışını etkilemez. Bir özel durum yakalandı, derleyici sınıf yıkıcı veya nesne veya özel durum olarak aynı kapsamda olan nesneler için yıkıcı çağırır. Bir özel durum yakalandı değil, bu yıkıcı çalışmaz.
Bkz: _set_se_translator için özel durum kısıtlamaları altında /clr.
Seçenek simge ile temizlenmiş olması -. Örneğin, /EHsc- yorumlanan /EHs /EHc- ve eşdeğeri olan /EHs.
Daha fazla bilgi için bkz. Synchronous Exception Handling.
Visual Studio geliştirme ortamındaki bu derleyici seçeneğini ayarlamak için
Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz. Nasıl yapılır: Proje özellik sayfalarını açın.
Tıklatın c/C++ klasörü.
Tıklatın Kod oluşturma özellik sayfası.
Değiştirmek C++ özel durumlarını etkinleştirmek özelliği.
Alternatif olarak, aşağıdaki yordamı kullanabilirsiniz:
Visual Studio geliştirme ortamındaki bu derleyici seçeneğini ayarlamak için
Tıklatın c/C++ klasörü.
Tıklatın Kod oluşturma özellik sayfası.
Set C++ özel durumlarını etkinleştirmek için No.
Tıklatın komut satırı özellik sayfası.
Derleyici seçeneği yazın Ek seçenekler kutusu.
Bu derleyici seçeneği programlı olarak ayarlamak için
- Bkz: ExceptionHandling