gpt4 book ai didi

const volatile 指针函数参数

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:17 26 4
gpt4 key购买 nike

对于嵌入式软件项目,我们需要使用一些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 变量。但是,如果我们抛弃 volatile 并且我们的编译器进行一些强大的优化,这会有什么不同吗?

最佳答案

您始终可以使用具有非 volatile 参数的函数。只是函数中的代码处理给定的对象,就好像它们是易变的(很可能在途中失去性能)。很难想象带有可变参数(“因为它们可能会在不通知的情况下更改”)的函数可以明智地做什么。在您编写时,在您的情况下,数据无论如何都不会改变,因此最灵活的解决方案是声明参数 const 并忘记 volatile。

请使用“uint8_t”,而不是像 uint8 这样的本土类型名称 - 它自 1996 年以来就已成为标准!

关于const volatile 指针函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13763006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com