gpt4 book ai didi

c - 在 C 中使用 "volatile"有害吗?

转载 作者:行者123 更新时间:2023-12-02 01:44:47 25 4
gpt4 key购买 nike

我对 Sparse 很陌生。在稀疏运行期间,我看到了这个警告:

警告:参数 2 中的类型不正确(不同的地址空间)

expected void volatile [noderef] <asn:2>*addr
got void *

基本上,这是因为以下原因而发生的:

struct context{
void __iomem *base;
};

readl(const volatile void __iomem* add){
....
....
}

function: foo(){
struct context *var;
readl(var->base); //---> here i got the above mentioned warning
}

为了解决这个问题,我做了以下操作:

struct context{
- void __iomem *base;
+ volatile void __iomem *base;
};

并删除警告。

我的问题: - 在这种情况下使用“volatile”是否有害。如果是,那么为什么? - 我认为我不应该将结构的成员设置为“易变”。但是,我们如何摆脱 Csparse 警告。

根据@ https://www.kernel.org/doc/Documentation/volatile-considered-harmful.txt 给出的文档@ http://lwn.net/Articles/233482/ .我们应该始终避免使用 volatile。

最佳答案

不,它没有害处。不知道为什么它应该或可能对什么有害?

如果您调用的代码需要一个 volatile 指针,那么传递一个非 volatile 指针是不正确的,因为调用上下文中的代码可能不是在这种情况下,适本地适应 volatile 值的要求。

关于c - 在 C 中使用 "volatile"有害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26338366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com