Aracılığıyla paylaş


setjmp ve longjmp kullanma

setjmp ve longjmp birlikte kullanıldığında, yerel gotoolmayan 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ı longjmpkullanan 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.

C (Yapılandırılmış) ile C++ Özel Durumlarını Karıştırma