setjmp
Menyimpan status program saat ini.
Sintaks
int setjmp(
jmp_buf env
);
Parameter
env
Variabel tempat lingkungan disimpan.
Nilai hasil
Mengembalikan 0 setelah menyimpan lingkungan tumpukan. Jika setjmp
dikembalikan karena longjmp
panggilan, ia mengembalikan value
argumen longjmp
, atau jika value
argumen longjmp
adalah 0, setjmp
mengembalikan 1. Tidak ada pengembalian kesalahan.
Keterangan
Fungsi ini setjmp
menyimpan lingkungan tumpukan, yang kemudian dapat Anda pulihkan, menggunakan longjmp
. Ketika digunakan bersama-sama, setjmp
dan longjmp
menyediakan cara untuk menjalankan non-lokal goto
. Mereka biasanya digunakan untuk meneruskan kontrol eksekusi ke penanganan kesalahan atau kode pemulihan dalam rutinitas yang sebelumnya disebut tanpa menggunakan konvensi panggilan atau pengembalian normal.
Panggilan untuk setjmp
menyimpan lingkungan tumpukan saat ini di env
. Panggilan berikutnya untuk longjmp
memulihkan lingkungan yang disimpan dan mengembalikan kontrol ke titik tepat setelah panggilan yang setjmp
sesuai. Semua variabel (kecuali variabel register) yang dapat diakses oleh kontrol penerimaan rutin berisi nilai yang mereka miliki ketika longjmp
dipanggil.
Tidak dimungkinkan untuk digunakan setjmp
untuk melompat dari asli ke kode terkelola.
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. Untuk detailnya, lihat longjmp
.
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 |
---|---|
setjmp |
<setjmp.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
Lihat contoh untuk _fpreset
.