关键字:指针转换 限定符 C语言 qualifier discard
各种牛来看一下。假设a变量被声明成volatile,如
uint32_t volatile a;
之后我们需要将a作为b函数的第一个入口参数,函数的声明为
uint32_t b(void *addr, uint32_t val);
因此要将第一个参数应该为 (void *) &a, 但是这样编译器会认为在转换过程中丢掉了volatile限定符而报错,因为指针拷贝是必须具有相同限定符的。
如果声明的时候不将a声明为volatile,又会有编译器优化的问题导致一些诡异现象。怎样才能解决这个问题? 实在郁闷了,先洗洗睡去!