Menggunakan setjmp dan longjmp
Ketika setjmp dan longjmp digunakan bersama-sama, mereka menyediakan cara untuk menjalankan non-lokal goto
. Mereka biasanya digunakan dalam kode C untuk meneruskan kontrol eksekusi ke penanganan kesalahan atau kode pemulihan dalam rutinitas yang sebelumnya disebut tanpa menggunakan konvensi panggilan atau pengembalian standar.
Perhatian
Karena setjmp
dan longjmp
tidak mendukung penghancuran objek bingkai tumpukan yang benar secara portabel antara pengkompilasi C++, dan karena mungkin menurunkan performa dengan mencegah pengoptimalan pada variabel lokal, kami tidak merekomendasikan penggunaannya dalam program C++. Kami sarankan Anda menggunakan try
dan catch
membangun sebagai gantinya.
Jika Anda memutuskan untuk menggunakan setjmp
dan longjmp
dalam program C++, sertakan <juga setjmp.h> atau <setjmpex.h> untuk memastikan interaksi yang benar antara fungsi dan Penanganan Pengecualian Terstruktur (SEH) atau penanganan pengecualian C++.
Khusus Microsoft
Jika Anda menggunakan opsi /EH untuk mengkompilasi kode C++, destruktor untuk objek lokal dipanggil selama unwind tumpukan. Namun, jika Anda menggunakan /EH atau/EHsc untuk mengkompilasi, dan salah satu fungsi Anda yang menggunakan panggilan longjmp
noexcept , maka destruktor melepas lelah untuk fungsi tersebut mungkin tidak terjadi, tergantung pada status pengoptimal.
Dalam kode portabel, ketika longjmp
panggilan dijalankan, penghancuran objek berbasis bingkai yang benar secara eksplisit tidak dijamin oleh standar, dan mungkin tidak didukung oleh pengkompilasi lain. Untuk memberi tahu Anda, pada tingkat peringatan 4, panggilan untuk setjmp
menyebabkan peringatan C4611: interaksi antara '_setjmp' dan penghancuran objek C++ tidak portabel.
END Khusus Microsoft
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk