Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
setjmpyazmaç değişkenlerinin değerleri yürütüldükten sonralongjmpuygun 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ığıylalongjmpbir 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ı
longjmpiç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.