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:
|