c - 传递 'memcpy' 的参数 2 会丢弃来自指针目标类型的 'volatile' 限定符

标签 c embedded

我有一个 volatile char * start_address; 指向寄存器部分(可能会因硬件行为而改变)。我需要阅读它并且我正在使用:

memcpy (
    result_p,            // starting address of destination
    start_address,       // starting address of source
    result_len           // for the length of the payload
);

我收到这个警告:

passing argument 2 of 'memcpy' discards 'volatile' qualifier from pointer target type

是阅读这些部分的更安全方法还是使用 memcpy 并防止此警告的更好方法?

最佳答案

memcpy 与 volatile 对象不兼容,函数签名中不匹配的指针类型有助于向您指出这一点。 memcpy 可以以任何顺序、任何单元大小进行复制,多次读取部分源,多次写入部分目标,等等。另一方面,volatile表达了一种意图,即访问对象的顺序和次数必须与它们在抽象机中的完全一致。如果要复制 volatile 数组,您需要编写自己的复制循环,看起来像一个简单的 memcpy,并使用正确的 volatile 类型用于循环中的指针。

关于c - 传递 'memcpy' 的参数 2 会丢弃来自指针目标类型的 'volatile' 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729240/

相关文章:

c - 如果你在 C 中没有 %f,如何编写一个 C 程序来打印没有 %f 的小数点后 2 位小数?

c - ATMEGA32 熔丝位设置、低熔丝和高熔丝、16MHz、外部晶体?

tcp - LWIP:TCP_INTERVAL 与 ACK 消息的接收究竟有何关系?

c# - 在 Linux 嵌入式单声道程序中,数组数据未正确编码为从 c# 到 c 的结构

c - 组合两个数组的键值对

冲突类型中的 C 错误

c - 我在 Visual Studio 2010 中尝试执行链接列表代码时遇到未处理的异常

c - 在 Visual Basic 中指向 double 的指针数组

c++ - SQLite - 预分配数据库大小

无法在嵌入式设备上为 SDL 屏幕设置视频模式