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-finally
deyimi, uygulamaların bir kod bloğunun yürütülmesi kesildiğinde temizleme kodunun yürütülmesini garanti etmelerini sağlayan C dilinin Bir Microsoft uzantısıdır. Temizleme, belleği serbest bırakma, dosyaları kapatma ve dosya tanıtıcılarını serbest bırakma gibi görevlerden oluşur. deyimi try-finally
, özellikle rutinden erken dönüşe neden olabilecek bir hata için denetim yapılan birkaç yere sahip yordamlar için yararlıdır.
try-finally-statement
:
__try
compound-statement
__finally
compound-statement
Yan tümceden __try
sonraki bileşik deyim korunan bölümdür. Yan tümcesinden __finally
sonraki bileşik deyim sonlandırma işleyicisidir. İşleyici, korunan bölümden çıkıldığında yürütülen bir eylem kümesini belirtir. Korunan bölümden bir özel durum (anormal sonlandırma) veya standart düşüş (normal sonlandırma) ile çıkılıp çıkılmayacağı önemli değildir.
Denetim, basit sıralı yürütme (fall through) ile bir __try
deyime ulaşır. Denetim deyimine __try
girdiğinde, ilişkili işleyicisi etkin hale gelir. Yürütme aşağıdaki gibi devam eder:
Korunan bölüm yürütülür.
Sonlandırma işleyicisi çağrılır.
Sonlandırma işleyicisi tamamlandığında, yürütme deyiminden
__finally
sonra devam eder. Korunan bölümün sonu ne olursa olsun (örneğin,goto
korunan gövdeden bir deyim aracılığıyla veya birreturn
deyim aracılığıyla), denetim akışı korunan bölümden çıkmadan önce sonlandırma işleyicisi yürütülür.
anahtar __leave
sözcüğü bir try-finally
deyim bloğu içinde geçerlidir. etkisi __leave
bloğun sonuna atlamaktır try-finally
. Sonlandırma işleyicisi hemen yürütülür. 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.
try-finally
Deyimini veya çalışma zamanı işlevini kullanarak deyimden longjmp
return
çıkmak anormal sonlandırma olarak kabul edilir. Bir ifadeye atlamak __try
yasal değil, bir ifadeden atlamak yasaldır. Kalkış noktası ile varış noktası arasında etkin olan tüm __finally
ifadeler çalıştırılmalıdır. Buna yerel rahatlama denir.
Bir deyimi yürütülürken try-finally
bir işlem sonlandırılırsa sonlandırma işleyicisi çağrılmaz.
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.
Deyimin try-except
nasıl çalıştığını görmek için deyiminin örneğine try-finally
bakın.
END Microsoft'a özgü