Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Memulihkan lingkungan tumpukan dan lokal eksekusi yang setjmp ditetapkan oleh panggilan.
Sintaks
void longjmp(
jmp_buf env,
int value
);
Parameter
env
Variabel tempat lingkungan disimpan.
value
Nilai yang akan dikembalikan ke setjmp panggilan.
Keterangan
Fungsi ini longjmp memulihkan lingkungan tumpukan dan lokal eksekusi yang sebelumnya disimpan env oleh setjmp. setjmp dan longjmp menyediakan cara untuk menjalankan nonlokal goto; biasanya digunakan untuk meneruskan kontrol eksekusi ke penanganan kesalahan atau kode pemulihan dalam rutinitas yang sebelumnya disebut tanpa menggunakan konvensi panggilan dan pengembalian normal.
Panggilan untuk setjmp menyebabkan lingkungan tumpukan saat ini disimpan di env. Panggilan berikutnya untuk longjmp memulihkan lingkungan yang disimpan dan mengembalikan kontrol ke titik segera setelah panggilan yang setjmp sesuai. Eksekusi dilanjutkan seolah-olah value telah dikembalikan oleh setjmp panggilan. Nilai semua variabel (kecuali variabel register) yang dapat diakses oleh kontrol penerimaan rutin berisi nilai yang mereka miliki ketika longjmp dipanggil. Nilai variabel register tidak dapat diprediksi. Nilai yang dikembalikan oleh setjmp harus bukan nol. Jika value diteruskan sebagai 0, nilai 1 diganti dalam pengembalian aktual.
Khusus Microsoft
Dalam kode Microsoft C++ di Windows, longjmp menggunakan semantik stack-unwinding yang sama dengan kode penanganan pengecualian. Aman untuk digunakan di tempat yang sama dengan pengecualian C++ yang dapat dinaikkan. Namun, penggunaan ini tidak portabel, dan dilengkapi dengan beberapa peringatan penting.
Hanya panggil longjmp sebelum fungsi yang disebut setjmp mengembalikan; jika tidak, hasilnya tidak dapat diprediksi.
Amati batasan berikut saat menggunakan longjmp:
Jangan berasumsi bahwa nilai variabel register akan tetap sama. Nilai variabel register dalam panggilan
setjmprutin mungkin tidak dipulihkan ke nilai yang tepat setelahlongjmpdijalankan.Jangan gunakan
longjmpuntuk mentransfer kontrol keluar dari rutinitas penanganan interupsi kecuali gangguan disebabkan oleh pengecualian titik mengambang. Dalam hal ini, program dapat kembali dari handler interupsi melaluilongjmpjika pertama kali menginisialisasi ulang paket matematika floating-point dengan memanggil_fpreset.Jangan gunakan
longjmpuntuk mentransfer kontrol dari rutinitas panggilan balik yang dipanggil secara langsung atau tidak langsung oleh kode Windows.Jika kode dikompilasi dengan menggunakan /EHs atau /EHsc, dan fungsi yang berisi
longjmppanggilan adalahnoexcept, maka objek lokal dalam fungsi tersebut mungkin tidak dihancurkan selama unwind tumpukan.
END Khusus Microsoft
Catatan
Dalam kode C++ portabel, Anda tidak dapat mengasumsikan setjmp dan longjmp mendukung semantik objek C++. Secara khusus, setjmp/longjmp pasangan panggilan memiliki perilaku yang tidak terdefinisi jika mengganti setjmp dan longjmp oleh catch dan throw akan memanggil destruktor non-sepele untuk objek otomatis apa pun. Dalam program C++, kami sarankan Anda menggunakan mekanisme penanganan pengecualian C++.
Untuk informasi selengkapnya, lihat Menggunakan setjmp dan longjmp.
Persyaratan
| Rutin | Header yang diperlukan |
|---|---|
longjmp |
<setjmp.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
Lihat contoh untuk _fpreset.