Aracılığıyla paylaş


deneyin-hariç deyimi (c)

Microsoft özel

Deneyin-dışında uygulamaların normal yürütme sona erdirmek olaylar oluştuğunda bir programın denetimini sağlayan c dili Microsoft uzantısı ifadesidir.Bu tür olayların özel durumlar verilir ve özel durumları ile ilgilenir mekanizması yapılandırılmış özel durum işleme denir.

Özel durumlar ya da donanım veya yazılım tabanlı olabilir.Hatta donanım veya yazılım özel durumlar uygulamalar tamamen kurtaramazsınız, yapılandırılmış özel durum işleme hata bilgilerini görüntülemek ve iç sorunu tanılamak üzere uygulama durumunu yakalamak sağlar.Bu kolayca üretilemeyen aralıklı sorunlar için özellikle yararlıdır.

Sözdizimi

  • try dışında deyimi:
    __try bileşik deyim

    __except ( ifade ) bileşik deyim

Sonra bileşik deyim __try yan tümcesinin guarded bölüm.Sonra bileşik deyim __except yan tümcesinin özel durum işleyicisi.İşleyicisi, bir dizi guarded bölümünün yürütme sırasında bir özel durum ortaya çıkar, gerçekleştirilecek eylemi belirtir.Yürütme gibi çalışır:

  1. Guarded bölümü çalıştırılır.

  2. Guarded bölüm yürütme sırasında hiçbir özel durum ortaya çıkarsa, deyiminin hemen sonrasına at yürütme devam __except yan tümcesi.

  3. Guarded bölüm yürütme sırasında bir özel durum oluşur veya guarded bölümüne herhangi bir yordamı çağırır,__except ifade değerlendirildi ve döndürülen değer özel durum nasıl işlendiğini belirler.Üç değer vardır:

    EXCEPTION_CONTINUE_SEARCHÖzel durum tanınmıyor.Bir işleyici için yığın yukarı ilk bulunduğu için aramaya devam edip deneyin-dışında sonra sonraki en yüksek önceliğe sahip işleyicileri için deyimleri.

    EXCEPTION_CONTINUE_EXECUTIONÖzel durum tanınan ancak atlamamış.Özel durumun oluştuğu noktayı yürütülmesine devam.

    EXCEPTION_EXECUTE_HANDLERÖzel durum tanınır.Denetim için özel durum işleyici yürüterek transfer __except bileşik deyim ve durumun oluştuğu noktayı yürütülmesine devam etmek.

Çünkü __except ifade c bir ifade olarak değerlendirilir, tek bir değer, koşullu ifade işleci veya virgül operatörünü sınırlıdır.Daha kapsamlı işlenmesi gerekirse, yukarıda listelenen üç değerden birini veren bir yordam ifade çağırabilirsiniz.

[!NOT]

Yapılandırılmış özel durum işleme c ve C++ kaynak dosyaları ile çalışır.Ancak, özellikle C++ için tasarlanmamıştır.C++ özel durum işleme kullanarak, kodunuzun daha taşınabilir olduğunu emin olabilirsiniz.Ayrıca, C++ özel durum işleme mekanizmasını çok daha esnek özel durumlar her türlü işleyebilir olmamasıdır.

[!NOT]

C++ programları için C++ özel durum işleme yapılandırılmış özel durum işleme yerine kullanılmalıdır.Daha fazla bilgi için bkz: Özel durum işleme , C++ dil başvurusu.

Uygulamadaki her yordam kendi özel durum işleyici olabilir.__except Deyimi yürütür kapsamında __try gövde.Bu, orada bildirilen herhangi bir yerel değişkenlere erişimi olduğu anlamına gelir.

__leave Anahtar sözcük içinde geçerli bir deneyin-dışında deyimi bloğu.Etkisini __leave sonuna atlamak için deneyin-dışında blok.Özel durum işleyicisi sonunda yürütme sürdürür.Ancak bir goto deyimi, aynı sonucu başarmak için kullanılabilir bir goto deyimi neden olan yığın unwinding.__leave Deyimi yığın unwinding katılmadığı için daha verimli.

Çıkma bir deneyin-dışında ifadesi ile longjmp çalýþma zamaný iþlevi olağan dışı sona ermesi olarak kabul edilir.İçine atlamak için geçersiz bir __try deyimi, ancak yasal bir yöneticiyi atlamak için.Bir işlemin yürütme ortasında da öldürülüyor, özel durum işleyici çağrılmaz bir deneyin-dışında ifadesi.

Örnek

Bir özel durum işleyici ve sonlandırma işleyicisi örneği aşağıda verilmektedir.Bkz: try finally ifadesi sonlandırma işleyicileri hakkında daha fazla bilgi için.

.
.
.
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");

Sağ tarafta eklenen yorum ile örnek çıktıdır:

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

SON Microsoft özel

Ayrıca bkz.

Başvuru

deneyin-ifadesi hariç