我正在尝试制作一个最小的工作示例来说明什么时候需要volatile。但下面的示例不需要volatile。谁能举个例子?谢谢。
#include <stdio.h>
#include <setjmp.h>
static jmp_buf buf;
int main() {
volatile int local_var = 1;
int local_var2 = 10;
if(!setjmp(buf)) {
local_var = 2;
local_var2 = 20;
longjmp(buf, 1);
} else {
printf("%d\n", local_var);
printf("%d\n", local_var2);
}
return 0;
}$ ./main.exe
2
20发布于 2019-02-07 16:07:34
每当局部变量在setjmp设置调用和回跳之间发生变化时。
7.13.2.1p3
在调用
_machine249函数时,所有可访问对象都具有值,并且抽象_machine249的所有其它组件具有状态,除了自动存储持续时间的对象的值是不确定的,所述自动存储持续时间的对象对于包含相应的setjmp宏的调用的函数来说是本地的,并且在setjmp调用和longjmp _ do调用之间已经被改变。
setjmp为您的寄存器创建快照。如果局部变量在寄存器中,并且您在setjmp调用之后更改了该变量,则当您跳回时,它将具有快照的值。
在Linux x86_64上,我得到的输出是2 (最新的,因为是易失性的)和10 (旧值)当我编译时开启了优化。
https://stackoverflow.com/questions/54564083
复制相似问题