在调试一些嵌入式代码时,我遇到了如下情况:
buffPtr = &a[5];
buffEndPtr = &a[10];
while (buffPtr != buffEndPtr)
{
*buffPtr = 0xFF;
buffPtr = &buffPtr[1]; /* MISRA improvement for: buffPtr++ */
}
为什么这个结构会比(*buffptr)++有所改进?
最佳答案
有一个MISRA规则表示唯一允许的数学指针是索引操作。
你所展示的模式是一个执行不力的工作。这是丑陋/怪异/不寻常的,而且可能是基于对规则目的的误解。这也可能违反另一条规则。
编写此代码的更好方法是:
for(i=5; i < 10; i++)
{
a[i] = 0xff;
}
更新2015-05-20-由于这是公认的答案,因此违反了实际规则,由embedded.kyle提供:
MISRA-C:2004,规则17.4(必需)或MISRA-C:2012,规则18.4(必需)
数组索引是指针运算唯一允许的形式。