Share via


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 longjmpnoexcept , 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

Pencampuran Pengecualian C (Terstruktur) dan C++