绕过警告:"控制变量未在循环内修改"

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的规则:

gre*_*k40 0

虽然您可能对 有所了解getTime(),但静态分析器基本上假设 的返回值getTime()可能永远不会触发循环结束条件,因此循环可能是无限的。

因此,您需要的是分析器接受的无限循环,以及循环体内的中断条件。据我通过快速搜索得知,for(;;)MISRA 仅接受无限循环。

for ( ; ; )
{
    if (t <= get_time()) break;
}
Run Code Online (Sandbox Code Playgroud)

这不应触发警告。