传递指向带有易失性成员作为函数参数的结构的指针

时间:2019-10-01 03:17:14

标签: c pointers struct 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?

1 个答案:

答案 0 :(得分:0)

简短的回答:无需在hdlPtr上添加volatile。

长答案:除非可以以某种意外的方式更改hdlPtr,否则无需将其声明为易失性。鉴于它是函数的局部变量,因此只能通过uartInitialize进行更改。假设您已将其声明为“ const”,则uartInitialize本身无法对其进行更改。