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
C++ programlarında veya
longjmp
kullanmasetjmp
C++ programlarında ve
longjmp
kullanımısetjmp
hakkında daha fazla bilgi edinin.C++ dilinde yapılandırılmış özel durumları işleme
Yapılandırılmış özel durumları işlemek için C++ kullanma yollarına ilişkin örneklere bakın.
Ayrıca bkz.
Özel durumlar ve hata işleme için modern C++ en iyi yöntemleri
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin