SORU
12 Mayıs 2010, ÇARŞAMBA


iptal etmek, feshetmek ya da çıkmak?

Üç olanlar arasındaki fark nedir ve nasıl düzgün kaldıramıyorum hangi özel durumda program sona erer miyim?

CEVAP
12 Mayıs 2010, ÇARŞAMBA


  • iptalgösterir "anormal" son program ve yükseltir POSIX sinyal SİGABRT, başka bir deyişle, herhangi bir eylemci var kayıtlı sinyal olacak çağrılan, ancak program hala sonlandırmak sonraları her iki durumda da. Genellikle kullanırsınız abort C program çıkışına beklenmeyen bir hata durumunda hatanın nerede olması muhtemeldir bir hata programı, yerine bir şey gibi kötü bir giriş veya bir ağ hatası. Örneğin, eğer bir veri yapısı mantıksal olarak asla olmamalı ne zaman BOŞ bir işaretçi varsa, 1**.

  • çıkın"bu hala bir hata (hata) göstergesi olabilir ancak. programın sonunda, normal gösterir Diğer bir deyişle, Eğer kullanıcı ayrıştırılması giriş yaptı 2 ** bir hata kodu ile birlikte olabilir, ya da bir dosya okunamadı. Çıkış kodu 0 başarı gösterir. exit isteğe bağlı olarak, program sona ermeden önce işleyicileri aramalar da. Bu atexit ve 5 *işlevleri ile kayıtlı.

  • ::std sonlandırınişlenmeyen bir özel durum var. otomatik olarak C programına çağırdı. Bu aslında C ** 6, fırlatma istisnalar sayesinde bütün olağanüstü hataları da olduğunu varsayarsak eşdeğerdir. Bu, varsayılan olarak sadece abort aramalar std::set_terminate işlevi tarafından ayarlanan bir işleyicisi çağırır.

C , genellikle önlemek istiyorsanız arama abort exit hata, beri siz en iyisi atma bir istisna ve izin verdiğin kod daha yukarı çağrı yığını olup olmadığı bitiş programdır uygun. Ya kullansanız da kullanmasanız da başarı için exit ya da algılama programı bir yere main dönmek deyimi dışında bir amaçla yapar olup olmadığını durum - meselesidir.

std::terminate son çare hata raporlama aracı, hatta C düşünülmelidir . std::terminate ile sorun sonlandırma işleyicisi yokdeğilişlenmeyen giden özel erişim, ne olduğunu anlatmak için bir yolu yok. Genellikle try { } catch (std::exception& ex) { } blok ana bütününü sarma off çok daha iyisin. En azından o zaman std::exception türetilen bu özel durumlar hakkında daha fazla bilgi (tabii ki, ancak std::exception türetmek değil istisna hala işlenmeyen sona ereceğini) şikayet edebilirsiniz.

try { } catch(...) { } main vücut sarma yine söz konusu durum için erişim yok çünkü bir handler ayarı sonlandırmak daha iyi değil.Düzenleme:Neil Butterworth cevabı başına, bir yığın halinde bu durumda çözülmemiş, (biraz şaşırtıcı) işlenmeyen bir özel durum için doğru değil, bu bir yararı yoktur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C++

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Grace Su

    Grace Su

    6 Ocak 2006
  • SignatureSeries

    SignatureSer

    24 Aralık 2006
  • stokelycalm

    stokelycalm

    28 Aralık 2010