如何创建volatile
结构数组?每个结构包含3个函数指针。
即。是吗
State_t * volatile states[10];
或
volatile State_t * states[10];
...
此外,结构属性是否也应定义为volatile
?
这是为了确保编译器不会清除函数指针。使用GCC
编译时,代码工作正常。但是,数组中的第二个条目返回使用ARM编译器为Cortex-M3编译的垃圾。
答案 0 :(得分:1)
State_t *volatile states[10];
上述方法states
是10
指向State_t
类型对象的{1}}易失性指针的数组。这里的volatile
关键字限定了指针,而不是指向的值。
State_t volatile *states[10];
上述方法states
是指向10
类型对象的volatile State_t
指针数组。这里,volatile
关键字不是指针,而是指向的值。以上也可以写成
volatile State_t *states[10];
要回答问题的后半部分,如果您将结构变量限定为volatile
,则其所有成员都为volatile
。但是,volatile
限定不是结构定义的一部分。
volatile struct states {
// stuff
} state_a;
struct states state_b;
此处state_a
符合volatile
条件,但state_b
不合格。因此,除非在与结构定义相同的语句中创建states
实例,否则需要将每个volatile
实例显式限定为states
。