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.

Baca juga

Kontrol proses dan lingkungan
longjmp