2010-08-27 18 views
5

Linux, C++ 'ya başvurmadan C dilinde bir istisna işleme sağlıyor mu? Veya, böyle bir istisna işleminin uygulanmasının en iyi yolu ne olabilir? Amaç, çağrılan her işlev için dönüş kodlarını kontrol etmekten kaçınmak, ancak C++ gibi bir şey yapmak, iş parçacığı güvenli ve kolay taşınabilir.Linux'ta C++ olmadan İstisna İşlemi C++

+8

Gerçek erkekler setjmp()/longjmp() işlevini kullanır. –

+0

Teşekkürler, bunu kontrol edecek. Aşağıda önerildiği gibi setjmp/longjmp sinyalleri kullanılarak bir avantaj/dezavantaj var mıdır? – stefangachter

cevap

3

böyle bir şey sağlayan Linux duymadım, ancak bu sayfa C için kütüphane işleme bir üçüncü taraf istisna anlatılmaktadır: http://www.on-time.com/ddj0011.htm Gerçi indirme bağlantısını bulmak mümkün olmamıştır.

+0

Teşekkürler, bu arada aynı siteye tökezledim, ancak kaynak kodunu bulamadım. – stefangachter

+0

Burada, yukarıda belirtilen uygulama hakkında yorum yapma ve yorumlamaya ilişkin bazı genel düşünceler bulunmaktadır: http://landheer-cieslak.com/wordpress/error-handling-in-c/ – stefangachter

7

Sinyal işleyicileri bunun için yazarak sinyalleri işleyebilirsiniz. GNU de belgelenmiş Bu sinyallerin bazıları şunlardır:

  • Program Hata Sinyalleri: Ciddi bir program hataları bildirmek için kullanılır.
  • Sonlandırma Sinyalleri: Programı kesmek ve/veya sonlandırmak için kullanılır.
  • Alarm Sinyalleri: Zamanlayıcıların sona ermesini belirtmek için kullanılır.
  • Asenkron G/Ç Sinyalleri: Girişin mevcut olduğunu belirtmek için kullanılır.
  • İş Denetim Sinyalleri: İş denetimini desteklemek için kullanılan işaretler.
  • Çalışma Hatası Sinyalleri: İşletim sistemi hatalarını bildirmek için kullanılır.
  • Çeşitli Sinyaller: Muhtelif Sinyaller.
  • Sinyal Mesajlar: Bu here hakkında derinlemesine bilgi alabileceğimiz bir sinyal

açıklayan bir ileti yazdırma. Size aradığınızı herhalde aşağıdaki durumlarda iken: Eğer sinyalleri neden olan bir olay öngörüyorsanız

, bir işleyici işlevi tanımlayın ve çalıştırmak için işletim sistemini söyleyebilir zaman o belirli tip sinyal geldiğinde.

+0

İpucu için teşekkürler. Ekspres yönetimi için sinyal kullanan bazı örnek kodlardan haberdar mısınız? – stefangachter

+0

Gönderide bağlantıyı okursanız örnek kodlar vardır. –

1

Offtopic muhtemelen ama üzgünüm, bunu karşı koyamaz. Windows yapılandırılmış özel durum işleme -

söylemeliyim, ben şimdiye kadar gördüğüm tek gerçekten iyi ve kapsamlı bir istisna mekanizması SEH olduğunu.

BT (durum dinlenmek yığın boyunca otomatik bir nesnenin yıkıcı içinde atış zaman ellerini yükseltir) C++ durum işleme modeli darbeler. o yazılım istisnalar ve donanım tarafından üretilenler hem birleştirir beri

Artı o, gerçekten homojen istisna işleme var. Ya Windows için yazma veya Linux için benzer bir şey uygulamak -

Eğer durum işleme istiyorsanız Böylece

.

P.S.Birçok insanın aksine, istisna işleminin kadarı, jmp'u kullanarak normal program akışını kesmekten daha fazladır.

Ayrıca, istisnayı kimin ve nasıl ele aldığına ilişkin bir müzakere zinciri. O (en önemli) var - Her kapsamda doğru temizleme yürütme, iç içe istisnalar ile uğraşan ve

1

Benim kütüphanede exceptions4c bakmak için önerebilir vb? Linux üzerinde test edilmiştir ve finally bloklar, sinyal işleme ve istisna hiyerarşileri oluşturmanızı sağlayan polimorfizm gibi birçok özelliğe sahiptir. Ayrıca çok iş parçacığı destekler.