使用setjmp/longjmp

不要使用 setjmplongjmp 在 C++ 程序;这些函数不支持 C++ 对象语义。 此外,在 C++ 中使用这些功能程序可以防止在局部变量的优化降低性能。 使用 C++ 异常处理 try/catch 构造。

如果在 c. C++ 程序必须使用 setjmp/longjmp ,这些函数和 C++ 异常处理之间的交互需要包括 SETJMP.H 或 SETJMPEX.H。 ,如果使用编译 /EH,本地对象的析构函数将调用堆栈展开过程。 如果用 /EHs 进行编译,其中一个函数调用使用 nothrow的功能,属性,并且,如果使用的功能 nothrow 调用 longjmp,析构函数展开可能不根据该优化器,会出现。

此外,因此,如果您希望代码移植,不要依赖于基于帧的对象的正确损坏,在执行非本地导航使用调用 longjmp时。

请参见

参考

混合C (结构)和C++异常