首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当调用` When _ when ()`时需要`volvle`?

当调用` When _ when ()`时需要`volvle`?
EN

Stack Overflow用户
提问于 2019-02-07 07:22:58
回答 1查看 163关注 0票数 1

我正在尝试制作一个最小的工作示例来说明什么时候需要volatile。但下面的示例不需要volatile。谁能举个例子?谢谢。

代码语言:javascript
复制
#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;
}
代码语言:javascript
复制
$ ./main.exe 
2
20
EN

回答 1

Stack Overflow用户

发布于 2019-02-07 16:07:34

每当局部变量在setjmp设置调用和回跳之间发生变化时。

7.13.2.1p3

在调用

_machine249函数时,所有可访问对象都具有值,并且抽象_machine249的所有其它组件具有状态,除了自动存储持续时间的对象的值是不确定的,所述自动存储持续时间的对象对于包含相应的setjmp宏的调用的函数来说是本地的,并且在setjmp调用和longjmp _ do调用之间已经被改变。

setjmp为您的寄存器创建快照。如果局部变量在寄存器中,并且您在setjmp调用之后更改了该变量,则当您跳回时,它将具有快照的值。

在Linux x86_64上,我得到的输出是2 (最新的,因为是易失性的)和10 (旧值)当我编译时开启了优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54564083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档