我正在使用在string.h文件中声明的标准memcpy函数:
extern void * memcpy(void *,const void *,size_t);情况1 :我的代码编译时没有任何错误或警告。
const …
我想如果你改变指针算术
buff+2
在第一种情况下
&(buff[2])
MISRA警告应该消失。
换句话说:在案例2中添加& -operator。
只是;
memcpy( data, &buff[2], 3u ) ;
指针算术和强制转换都是不必要的,与MISRA规则相反。
投了一个 void* 相反,误解了void指针的目的,并且通常可以抑制编译器可能会发出的基本警告。由此产生的去杂波使代码更容易阅读 和 符合MISRA标准。
void*
你的第二个案例在语义上也是不正确的,并且不会导致正确的行为 - 警告并不总是正确的 警告 ;通常它们表示语义错误。对于编译器“ 错误 “只是意味着” 无法编译 “(句法错误); a 语义 错误是代码不按预期执行的错误。