gpt4 book ai didi

c - 赋值原因不明确会丢弃 volatile 限定符

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:10 27 4
gpt4 key购买 nike

我在结构中有一个指向结构实例链表的指针字段。

struct myStruct {
some fields...
struct list_objects * volatile list;
}

根据我的理解,我这样声明是为了告诉编译器指针可以从其他线程改变,所以不要缓存它。
不是list指向的内容会变,而是指针会变。 (否则 volatile 一定是第一个关键字吧?)

list 的访问受到互斥锁的保护,因此线程不会在写入此指针时发生冲突。

当我将此指针的地址读入指向指针的指针时出现问题。

struct list_objects **ptrToPtr = &myStructVariable->list;

我需要双指针来将另一个指针分配给这个变量或遍历链表。

编译器发出“赋值丢弃可变限定符”警告。我读到了这个警告,认为我基本上理解了它,但我不明白为什么它会出现在这里。
这个变量的地址永远不应该改变。内容是易变的,但不是该内容所在的地方。

我想我对这件事的理解很差。请帮我解决这个问题。

最佳答案

你是对的,ptrToPtr 不会改变(如果你不对它进行赋值),所以它不需要是易变的。然而,*ptrToPtr 可能会改变,因为它实际上是 myStructVariable->list

所以你的声明应该是struct list_objects * volatile * ptrToPtr = &myStructVariable->list;

关于c - 赋值原因不明确会丢弃 volatile 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54590170/

27 4 0
文章推荐: c - 静态 const 与 const 声明在 uC 上的性能差异
文章推荐: css - 用另一个类覆盖自定义 CSS
文章推荐: javascript - 仅使用 HTML-CSS 制作在缩放调整后保持在原位的叠加
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com