setjmp ve longjmp kullanma
setjmp ve longjmp birlikte kullanıldığında, yerel goto
olmayan bir yürütme yolu sağlarlar. Bunlar genellikle standart çağrı veya dönüş kurallarını kullanmadan daha önce çağrılan bir yordamda yürütme denetimini hata işleme veya kurtarma koduna geçirmek için C kodunda kullanılır.
Dikkat
setjmp
ve longjmp
C++ derleyicileri arasında taşınabilir yığın çerçevesi nesnelerinin doğru imhasını desteklemediğinden ve yerel değişkenler üzerinde iyileştirmeyi engelleyerek performansı düşürebileceğinden, bunların C++ programlarında kullanılmasını önermiyoruz. Bunun yerine ve catch
yapılarını kullanmanızı try
öneririz.
bir C++ programında ve longjmp
kullanmaya setjmp
karar verirseniz, işlevler ve Yapılandırılmış Özel Durum İşleme (SEH) veya <C++ özel durum işlemesi arasında doğru etkileşimi sağlamak için setjmp.h> veya setjmpex.h> de ekleyin<.
Microsoft'a Özgü
C++ kodunu derlemek için / EH seçeneğini kullanırsanız, yığın geri sarma sırasında yerel nesneler için yıkıcılar çağrılır. Ancak derlemek için /EHs veya /EHsc kullanırsanız ve noexcept çağrısı longjmp
kullanan işlevlerinizden biri , iyileştirici durumuna bağlı olarak bu işlevin yıkıcısını geri alma işlemi gerçekleşmeyebilir.
Taşınabilir kodda, bir longjmp
çağrı yürütülürken, çerçeve tabanlı nesnelerin doğru yok edilmesi açıkça standart tarafından garanti edilmediğinden ve diğer derleyiciler tarafından desteklenmeyebilir. Uyarı düzeyi 4'te uyarı C4611' çağrısına setjmp
neden olur: '_setjmp' ile C++ nesne yok etme arasındaki etkileşim taşınabilir değildir.
END Microsoft'a Özgü
Ayrıca bkz.
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