gpt4 book ai didi

c - 如何使这个结构实例在 C 中易变?

转载 作者:行者123 更新时间:2023-12-04 18:21:21 26 4
gpt4 key购买 nike

我正在使用通用缓冲区 .c/.h 文件。我想创建一个限定为 volatile 以用作 com 缓冲区的实例。

下面的代码说明了问题,限定符丢失了??将缓冲区地址传递给成员函数时。

代码段使用 'const' 限定符作为示例,我假设 'volatile' 的行为方式相同。使用 Rowley ARM GCC 编译器。

typedef struct buff_t {
char buffchar;
int index;
}buff;

void buff_init( buff *thisbuff ) {
thisbuff->buffchar = 'x';
thisbuff->index = 0;
}


int main(void)
{

buff memBuffer;
buff const UARTBuffer;
buff *buff_ptr;

buff_ptr = &memBuffer;
buff_init( buff_ptr ); /* struct elements initialized as expected */

// UARTBuffer.buffchar = 'y'; /* this caught by compiler as error to read-only object */
buff_ptr = &UARTBuffer; /* compile warning: assignment discards 'const' qualifier from pointer target type */
buff_init( buff_ptr ); /* UARTBuffer elements also initialized, expected const??? */

}

最佳答案

代码尝试修改 const通过指针构造对象,因此调用 未定义行为(UB) .简而言之,它是无效代码。避免这种情况的唯一方法是不编写调用 UB 的代码。
请注意,编译器允许您编写此类代码并朝自己的脚(而不是脸)开枪并不意味着您应该这样做。如果您有枪,则有责任明智地使用它。

将变量标记为 volatile您只需要添加关键字volatile在其声明期间,类似于 const在节目中。

关于c - 如何使这个结构实例在 C 中易变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10612068/

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