首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >易失性结构语义

易失性结构语义
EN

Stack Overflow用户
提问于 2010-01-12 04:05:04
回答 2查看 37.6K关注 0票数 78

将一个结构类型变量的实例声明为易失性(如果其字段是在可重入代码中访问的)是否足够,或者必须将结构的特定字段声明为易失性?

换句话说,它们之间的语义差异(如果有的话)是什么:

代码语言:javascript
运行
复制
typdef struct {
  uint8_t bar;
} foo_t;

volatile foo_t foo_inst;

代码语言:javascript
运行
复制
typedef struct{
  volatile uint8_t bar;
} foo_t;

foo_t foo_inst;

我认识到,将指针类型的变量声明为易失性(例如,易失性uint8_t * foo)只是通知编译器foo指向的地址可能会改变,而不会对foo指向的值做任何声明。我不清楚类比是否适用于结构类型的变量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-12 04:13:18

在您的示例中,这两个是相同的。但问题围绕着指针。

首先,volatile uint8_t *foo;告诉编译器所指向的内存是易失性的。如果要将指针本身标记为易失性,则需要执行uint8_t * volatile foo;

这就是将结构标记为易失性与标记单个字段之间的主要区别。如果你有:

代码语言:javascript
运行
复制
typedef struct
{
    uint8_t *field;
} foo;

volatile foo f;

它的行为类似于:

代码语言:javascript
运行
复制
typedef struct
{
    uint8_t * volatile field;
} foo;

而不是像:

代码语言:javascript
运行
复制
typedef struct
{
    volatile uint8_t *field;
} foo;
票数 81
EN

Stack Overflow用户

发布于 2010-01-12 04:16:59

如果用volatile声明一个结构,那么它的所有成员也都是volatile的

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

https://stackoverflow.com/questions/2044565

复制
相关文章

相似问题

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