Misra-C违规:格式错误的for循环条件原因排查求助
Misra-C 针对该for循环报错的原因及修复方案
报错原因
拿Misra-C:2012的Rule 13.5来说,它明确要求for循环的终止条件(也就是第二个表达式)必须是关系运算(<、>、<=、>=)或者相等运算(==、!=),绝对不能直接用指针、整数这类值做隐式布尔判断——你代码里的for (; element; ...)就是直接把指针element当条件,本质是隐式判断element != NULL,但这种写法不符合Misra的规范,所以会触发报错。
Misra制定这条规则的核心是强制代码逻辑显式化,避免其他人读代码时误解意图,同时也能杜绝隐式转换可能带来的潜在bug。如果是遵循Misra-C:2004,对应的Rule 13.3要求也是一致的。
修复代码
把隐式判断改成显式和NULL比较就符合要求了:
int count = 0; element = TAILQ_LAST(&(phdata->ph_consice_head), phqueue); for (; element != NULL; // 显式判断指针非空,满足Misra规则 element = TAILQ_PREV(element, phqueue, next)) { count ++; }
内容的提问来源于stack exchange,提问作者SagePath
相关产品推荐
相关产品推荐

