我不知道,为什么Misra-C报告这个错误在下面的代码快照。
int count = 0;
element = TAILQ_LAST(&(phdata->ph_consice_head), phqueue);
for (;
element; // Malformed for-loop Condition help
The termination clause of this for loop is not of the expected form.
element = TAILQ_PREV(element, phqueue, next)) {
count ++;
}
注意-元素是指向结构的指针。
如果有人能帮我找出for循环的问题所在,那就太好了。
3条答案
按热度按时间gzszwxb41#
米斯拉是一个习惯的动物,不喜欢任何“看起来不寻常”的东西。
它最喜欢
for
循环,如2w2cym1i2#
MISRA C:2012年规则14.2对于
for
循环的3个子句中允许的内容是非常不言自明的。与任何规则一样,在使用MISRA C之前,您需要研究它。在这种情况下,第二个子句需要使用循环迭代器,静态分析器可能会对这里的循环迭代器感到困惑。
此外,
element;
不符合MISRA 14.4,您需要显式地创建一个“本质上为布尔”的表达式,例如element != NULL
。为了符合MISRA,我建议如下重写:
或者,如果存在某个已知的最大迭代次数,则也可以将第2子句设为
count<n
。xpszyzbs3#
for
循环最好用于已知次数的迭代;while
循环对于以下情况更有意义:您的代码显示的是
while
循环,而不是for
循环...它可以更清楚地显示为(并且符合MISRA):或确保正确的
count
: