【发布时间】:2011-01-03 21:54:49
【问题描述】:
将结构类型变量的实例声明为 volatile 是否足够(如果在可重入代码中访问其字段),还是必须将结构的特定字段声明为 volatile?
措辞不同,以下之间的语义差异(如果有的话)是什么:
typdef struct {
uint8_t bar;
} foo_t;
volatile foo_t foo_inst;
和
typedef struct{
volatile uint8_t bar;
} foo_t;
foo_t foo_inst;
我认识到将指针类型的变量声明为 volatile(例如 volatile uint8_t * foo)只会通知编译器 foo 指向的地址可能会改变,而不会声明 foo 指向的值。我不清楚类比是否适用于结构类型的变量。
【问题讨论】:
-
在 C 中,两个版本之间没有区别,但是,在 C++ 中,它们是不同的,如下例所示:godbolt.org/z/fYhzMKqjj 您可以自己尝试。