Aracılığıyla paylaş


longjmp

Bir çağrı tarafından setjmp ayarlanan yığın ortamını ve yürütme yerel ayarını geri yükler.

Sözdizimi

void longjmp(
   jmp_buf env,
   int value
);

Parametreler

env
Ortamın depolandığı değişken.

value
Çağrılmak üzere setjmp döndürülecek değer.

Açıklamalar

İşlev, longjmp daha önce tarafından setjmpkaydedilen env bir yığın ortamını ve yürütme yerel ayarını geri yükler. setjmp ve longjmp yerel gotoolmayan bir yürütme yöntemi sağlar; bunlar genellikle normal çağrı ve dönüş kuralları kullanılmadan daha önce çağrılan bir yordamda yürütme denetimini hata işleme veya kurtarma koduna geçirmek için kullanılır.

çağrısı setjmp , geçerli yığın ortamının içinde envkaydedilmesine neden olur. Sonraki bir çağrı longjmp , kaydedilen ortamı geri yükler ve denetimi ilgili setjmp çağrının hemen ardından noktaya döndürür. Yürütme, çağrı tarafından döndürüldü gibi value devam eder setjmp . Rutin alma denetimi tarafından erişilebilen tüm değişkenlerin (yazmaç değişkenleri hariç) değerleri çağrıldığında longjmp sahip oldukları değerleri içerir. Yazmaç değişkenlerinin değerleri tahmin edilemez. tarafından setjmp döndürülen değer sıfır olmayan olmalıdır. 0 olarak geçirilirse value , 1 değeri gerçek dönüşte değiştirilir.

Microsoft'a Özgü

Windows üzerinde Microsoft C++ kodunda, longjmp özel durum işleme koduyla aynı yığın geri sarma semantiğini kullanır. C++ özel durumlarının oluşturulabileceği yerlerde kullanmak güvenlidir. Ancak, bu kullanım taşınabilir değildir ve bazı önemli uyarılar ile birlikte gelir.

Yalnızca çağrılan setjmp işlevden önce çağrısı longjmp döndürür; aksi takdirde sonuçlar tahmin edilemez.

kullanırken longjmpaşağıdaki kısıtlamalara dikkat edin:

  • Yazmaç değişkenlerinin değerlerinin aynı kalacağını varsaymayın. Rutin çağrıdaki setjmp yazmaç değişkenlerinin değerleri yürütüldükten sonra longjmp uygun değerlere geri yüklenmeyebilir.

  • Kesmeye kayan nokta özel durumu neden olmadığı sürece, denetimi kesme işleme yordamının dışına aktarmak için kullanmayın longjmp . Bu durumda, bir program ilk olarak çağırarak _fpresetkayan nokta matematik paketini yeniden başlatırsa aracılığıyla longjmp bir kesme işleyicisinden döndürebilir.

  • Windows kodu tarafından doğrudan veya dolaylı olarak çağrılan bir geri çağırma yordamından denetimi aktarmak için kullanmayın longjmp .

  • Kod /EHs veya /EHsc kullanılarak derlenmişse ve çağrıyı longjmp içeren işlev isenoexcept, yığın geri sarma sırasında bu işlevdeki yerel nesneler yok edilmeyebilir.

END Microsoft'a Özgü

Not

Taşınabilir C++ kodunda, C++ nesne semantiğini varsayamaz setjmp ve longjmp destekleyemezsiniz. Özellikle, bir setjmp/longjmp çağrı çifti ile longjmp catch değiştirildiğinde setjmp tanımsız bir davranışa sahiptir ve throw herhangi bir otomatik nesne için önemsiz olmayan yıkıcıları çağırır. C++ programlarında C++ özel durum işleme mekanizmasını kullanmanızı öneririz.

Daha fazla bilgi için bkz . setjmp ve longjmp kullanma.

Gereksinimler

Yordam Gerekli başlık
longjmp <setjmp.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

örneğine _fpresetbakın.

Ayrıca bkz.

İşlem ve ortam denetimisetjmp