Joh*_*Doe 5 c misra while-loop
我有一个非常简单的函数,它创建了一个时间延迟:
void delay(int time_in_ms)
{
int t = get_time() + time_in_ms;
while (get_time() < t)
{
};
}
delay(750);
Run Code Online (Sandbox Code Playgroud)
我收到警告,控制变量t未在while循环内修改.我不需要修改变量,只要条件满足,我只需要在while循环中.如何以"好"的方式绕过这个?
警告由MISRA静态分析工具创建.完整的信息:
"此循环结构中的控制变量永远不会被修改"
MISRA C:2012适用于消息2467的规则:
虽然您可能对 有所了解getTime()
,但静态分析器基本上假设 的返回值getTime()
可能永远不会触发循环结束条件,因此循环可能是无限的。
因此,您需要的是分析器接受的无限循环,以及循环体内的中断条件。据我通过快速搜索得知,for(;;)
MISRA 仅接受无限循环。
for ( ; ; )
{
if (t <= get_time()) break;
}
Run Code Online (Sandbox Code Playgroud)
这不应触发警告。