关键字:指针转换 限定符 C语言 qualifier discard

各种牛来看一下。假设a变量被声明成volatile,如

uint32_t volatile a;

之后我们需要将a作为b函数的第一个入口参数,函数的声明为

uint32_t b(void *addr, uint32_t val);

因此要将第一个参数应该为 (void *) &a, 但是这样编译器会认为在转换过程中丢掉了volatile限定符而报错,因为指针拷贝是必须具有相同限定符的。

如果声明的时候不将a声明为volatile,又会有编译器优化的问题导致一些诡异现象。怎样才能解决这个问题? 实在郁闷了,先洗洗睡去!