对于嵌入式软件项目,我们需要使用一些const volatile TYPE *
指针。现在我们有一些计算函数,如下所示:
uint8 calc(const volatile uint8 *array, uint8 value) { ... }
在函数执行期间,两个变量的数据都不会改变。
调用代码如下所示:
const volatile uint8 *array = (const volatile uint8 *)0x00010111;
uint8 value = 8;
uint8 result = calc(array, value);
现在的问题是,如果我们设计没有 volatile 参数的计算函数,会有什么不同:
uint8 calc(const uint8 *array, uint8 value) { ... }
对于调用,我们抛弃了 volatile:
uint8 result = calc((const uint8 *)array, value);
第二种解决方案的优点是更灵活:我们也可以将该函数用于非易失性变量。但是,如果我们抛弃 volatile 并且我们的编译器进行一些强大的优化,它会有什么不同吗?