Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft'a özgü
try-except
deyimi, normalde yürütmeyi sonlandıran olaylar gerçekleştiğinde uygulamaların bir programın denetimini almasına olanak tanıyan bir C dilinin Microsoft uzantısıdır. Böyle olaylara özel durumlar, özel durumlarla uğraşan mekanizmaya ise yapılandırılmış özel durum işleme adı verilir.
Özel durumlar donanım veya yazılım tabanlı olabilir. Uygulamalar donanım veya yazılım özel durumlarından tamamen kurtulamasa bile, yapılandırılmış özel durum işleme hata bilgilerini günlüğe kaydetmeyi ve görüntülemeyi mümkün kılar. Sorunu tanılamaya yardımcı olmak için uygulamanın iç durumunu yakalamak yararlı olur. Özellikle, yeniden oluşturması kolay olmayan aralıklı sorunlar için yararlıdır.
Sözdizimi
try-except-statement
:
__try
compound-statement
__except (
expression
)
compound-statement
Yan tümceden __try
sonraki bileşik deyim korunan bölümdür. Yan tümceden __except
sonraki bileşik deyim özel durum işleyicidir. İşleyici, korunan bölümün yürütülmesi sırasında bir özel durum oluşursa yapılması gereken eylemler kümesini belirtir. Yürütme aşağıdaki gibi devam eder:
Korunan bölüm yürütülür.
Korunan bölümün yürütülmesi sırasında hiçbir özel durum gerçekleşmezse, yürütme işlemine
__except
yan tümcesinden sonra deyimde devam edilir.Korunan bölümün yürütülmesi sırasında veya korunan bölümün çağırıldığı herhangi bir yordamda bir özel durum oluşursa,
__except
ifade değerlendirilir. Döndürülen değer, özel durumun nasıl işleneceğini belirler. Üç olası değer vardır:EXCEPTION_CONTINUE_SEARCH
: Özel durum tanınmıyor. Önce deyimleri içerentry-except
, ardından sonraki en yüksek önceliğe sahip işleyiciler için bir işleyici için yığında aramaya devam edin.EXCEPTION_CONTINUE_EXECUTION
: Özel durum tanınır ancak kapatılır. Yürütmeye, özel durumun gerçekleştiği noktadan devam edin.EXCEPTION_EXECUTE_HANDLER
Özel durum tanındı. Bileşik deyimini yürüterek denetimi özel durum işleyicisine aktarın__except
, ardından özel durumun oluştuğu noktada yürütmeye devam edin.
İfade bir C ifadesi olarak değerlendirildiğinden __except
, tek bir değerle, koşullu ifade işleciyle veya virgül işleciyle sınırlıdır. Daha kapsamlı bir işlem gerekliyse, ifade yukarıda listelenen üç değerden birini döndüren bir yordam çağırabilir.
Not
Yapılandırılmış özel durum işleme C ve C++ kaynak dosyalarıyla çalışır. Ancak, özellikle C++ için tasarlanmamıştır. Taşınabilir C++ programları için yapılandırılmış özel durum işleme yerine C++ özel durum işleme kullanılmalıdır. Ayrıca, C++ özel durum işleme mekanizması, herhangi bir türdeki özel durumları işleyebildiği için çok daha esnektir. Daha fazla bilgi için bkz. C++ Dil Başvurusu'nda özel durum işleme.
Bir uygulamadaki her yordamın kendi özel durum işleyicisi olabilir. İfade, __except
gövde kapsamında __try
yürütülür. Burada bildirilen tüm yerel değişkenlere erişimi vardır.
anahtar __leave
sözcüğü bir try-except
deyim bloğu içinde geçerlidir. etkisi __leave
bloğun sonuna atlamaktır try-except
. Yürütme, özel durum işleyicisi sona erdikten sonra devam eder. Bir deyimi aynı sonucu elde etmek için kullanılabilse de goto
, deyimi goto
yığın geri sarmaya neden olur. __leave
Deyimi, yığın geri sarmayı içermediğinden daha verimlidir.
Çalışma zamanı işlevini kullanarak bir try-except
deyimden longjmp
çıkmak anormal sonlandırma olarak kabul edilir. Bir ifadeye atlamak __try
yasal değildir, ama bir ifadeden atlamak yasaldır. Bir işlem bir deyimi yürütmenin try-except
ortasında sonlandırılırsa özel durum işleyicisi çağrılmaz.
Örnek
Burada bir özel durum işleyicisi ve sonlandırma işleyicisi örneği verilmiş. Sonlandırma işleyicileri hakkında daha fazla bilgi için bkz try-finally
. deyim (C).
.
.
.
puts("hello");
__try {
puts("in try");
__try {
puts("in try");
RAISE_AN_EXCEPTION();
} __finally {
puts("in finally");
}
} __except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ) {
puts("in except");
}
puts("world");
Aşağıda örnekten alınan ve sağ tarafta açıklama eklenmiş olan çıkış verilmişti:
hello
in try /* fall into try */
in try /* fall into nested try */
in filter /* execute filter; returns 1 so accept */
in finally /* unwind nested finally */
in except /* transfer control to selected handler */
world /* flow out of handler */
END Microsoft'a özgü