【发布时间】:2019-10-01 03:17:14
【问题描述】:
如果我有一个结构,其中一些成员是 volatile 但不是全部,并且我将指向该结构的指针作为函数参数传递,编译器是否会阻止对函数中的这些成员进行优化,或者我是否必须声明指针也很不稳定?
typedef struct {
volatile uint16_t reg1;
volatile uint16_t reg2;
const uint32_t speed;
uint8_t error;
}uart;
void uartInitialize(uart *const hdlPtr);
//void uartInitialize(volatile uart *const hdlPtr); is this required?
【问题讨论】:
-
称之为迷信,但我不相信 typdefs 中的
volatile关键字。我不相信所有编译器在 typdef 中的 volatile 行为都相同。我只相信完整的变量,并且只相信变量的定义。 -
我建议重复,因为问题没有显示 volatile 指针(如所述),而是显示 const 指向 volatile 变量的指针。在那个星座中,它是一个复制品。请随意指出,您实际上想要一个 volatile 指针,而不是评论停用的代码。在那种情况下,我承认它不是重复的。 (我相信这里没有欺骗锤。)
-
考虑将
const指针(指向volatile变量)定义为volatile以及const对我来说似乎很奇怪。请仔细检查这是否是您真正想要的,因为注释代码没有显示 volatile 指针,它是指向 volatile 变量的 const 指针,这恰好是我所相信的——假设指向的变量也是定义易失性......
标签: c pointers struct volatile