【发布时间】:2019-10-22 06:29:38
【问题描述】:
据我了解,setjmp 保存了当前上下文,并且应该在调用longjmp 时恢复它。然而,下一段代码打印 15 (我用 -g 编译并且没有任何优化)。我误解了这个结构还是我遗漏了什么?
#include <iostream>
#include <csetjmp>
std::jmp_buf jump_buffer;
int main()
{
int a = 0;
if (setjmp(jump_buffer) == 0) {
a = 15;
std::longjmp(jump_buffer, 42);
}
std::cerr << a << std::endl;
}
免责声明:仅出于好奇而尝试使用它。我从来没有听说过这个结构,直到我最近阅读了一些关于 NASA 编码指南的论文,其中提到禁止使用这种控制流结构
同时使用 c 和 c++ 标记,因为代码是混合的,我假设实际的相关功能与 c 重度用户更相关,而不是 c++...:/
【问题讨论】:
-
参考。
std::jmp_buf用于实际存储的内容(例如,没有您认为的局部变量值)。