次の方法で共有


setjmp/longjmp の使用

setjmplongjmp を一緒に使用すると、非ローカルの goto を実行することができます。 これらは通常、標準呼び出し規約や復帰規約を使用せずに、前に呼び出されたルーチンのエラー処理または回復コードに実行の制御を渡すために使用されます。

注意

ただし、setjmplongjmp は C++ オブジェクトのセマンティクスをサポートせず、ローカル変数の最適化を妨げることによってパフォーマンスを低下させる可能性があるため、C++ プログラムでは使用しないことをお勧めします。代わりに、try/catch 構造を使用することをお勧めします。

C++ プログラムで setjmp/longjmp を使用することにした場合は、SETJMP.H または SETJMPEX.H もインクルードして、関数と C++ 例外処理との相互作用が正しく行われるようにします。 コンパイルで /EH を使用すると、スタック アンワインド中にローカル オブジェクトのデストラクターが呼び出されます。 コンパイルで /EHs を使用し、関数の 1 つが nothrow を使用する関数を呼び出して、nothrow を使用する関数が longjmp を呼び出すと、オプティマイザーによってはデストラクター アンワインドが実行されない場合があります。

移植性のあるコードで、longjmp を呼び出す非ローカルの goto が実行される場合、フレーム ベースのオブジェクトの適切な破棄が行われない可能性があります。

参照

関連項目

C (構造化) と C++ の混合例外