news 2025/12/17 21:02:21

34、C++ 异常处理:从 setjmp/longjmp 到 C++ 异常

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
34、C++ 异常处理:从 setjmp/longjmp 到 C++ 异常

C++ 异常处理:从 setjmp/longjmp 到 C++ 异常

1. 认识 setjmp 异常

setjmp 异常可看作 C 风格的异常。与 C++ 风格的异常类似,它能让用户在代码中设置出错时返回的位置,并提供生成跳转异常的方法。

以下是一个示例代码:

#include <cstring> #include <csetjmp> #include <iostream> std::jmp_buf jb; void myfunc(int val) { if (val == 42) { errno = EINVAL; // Invalid argument std::longjmp(jb, -42); } } int main() { if (setjmp(jb) == -42) { std::cout << "failure: " << strerror(errno) << '\n'; std::exit(EXIT_FAILURE); } myfunc(1); std::cout << "success\n"; myfunc(42); std::cout << "success\n"; } // > g++ -std=c++17 scratchpad.cpp; ./a.out // success // failure: Invalid argument
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!