Aracılığıyla paylaş


C (yapılandırılmış) ve C++ özel durumlarını karıştırma

Taşınabilir kod yazmak istiyorsanız, bir C++ programında yapılandırılmış özel durum işleme (SEH) kullanılması önerilmez. Ancak, bazen yapılandırılmış özel durumları ve C++ kaynak kodunu kullanarak /EHa derlemek ve karıştırmak isteyebilirsiniz ve her iki özel durum türünü de işlemek için bazı tesislere ihtiyacınız olabilir. Yapılandırılmış özel durum işleyicisinde nesne kavramı veya türemiş özel durumlar olmadığından, C++ kodu tarafından oluşan özel durumları işleyemez. Ancak, C++ catch işleyicileri yapılandırılmış özel durumları işleyebilir. C++ özel durum işleme söz dizimi (try, throw, catch) C derleyicisi tarafından kabul edilir, ancak yapılandırılmış özel durum işleme söz dizimi (__try, __except, __finally) C++ derleyicisi tarafından desteklenir.

Yapılandırılmış özel durumları C++ özel durumları olarak işleme hakkında bilgi için bkz _set_se_translator .

Yapılandırılmış ve C++ özel durumlarını karıştırırsanız şu olası sorunlara dikkat edin:

  • C++ özel durumları ve yapılandırılmış özel durumlar aynı işlev içinde karıştırılamaz.

  • Sonlandırma işleyicileri (__finally bloklar), özel durum oluşturulduktan sonra geri sarma sırasında bile her zaman yürütülür.

  • C++ özel durum işlemesi, derleyici seçenekleriyle /EH derlenen tüm modüllerde unwind semantiğini yakalayabilir ve koruyabilir ve bu da geri sarma semantiğini etkinleştirir.

  • Yıkıcı işlevlerinin tüm nesneler için çağrılmadığı bazı durumlar olabilir. Örneğin, başlatılmamış bir işlev işaretçisi aracılığıyla işlev çağrısı yapmaya çalışılırken yapılandırılmış bir özel durum oluşabilir. İşlev parametreleri çağrıdan önce oluşturulan nesnelerse, bu nesnelerin yıkıcıları yığın geri sarma sırasında çağrılmaz.

Sonraki adımlar

Ayrıca bkz.

Özel durumlar ve hata işleme için modern C++ en iyi yöntemleri