This diagnostic rule is based on the MISRA (Motor Industry Software Reliability Association) software development guide.
This rule only applies to programs written in C. Expressions used in 'if' / 'for' / 'while' conditions should have essential Boolean type.
The MISRA standard introduces the essential type model, where a variable might have one of the following types:
Thus, the standard allows the following expressions:
An example for which the analyzer will issue a warning:
void some_func(int run_it)
{
if (run_it)
{
do_something();
}
// ....
}
Here the variable should be explicitly checked against zero:
void some_func(int run_it)
{
if (run_it != 0)
{
do_something();
}
// ....
}
Another example:
void func(void *p)
{
if (!p) return;
// ....
}
To eliminate the issue, the pointer should be explicitly compared with the null:
void func(void *p)
{
if (p == NULL) return;
// ....
}
The analyzer will not issue a warning for such code:
void fun(void)
{
while (1)
{
// ....
}
}
This diagnostic is classified as:
|