我有一个 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/