Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Rule 14.4 and the explanation is not enough to understand why
#1
MISRA C 2012 guideline says:
Strong typing requires the controlling expression of an if statement or iteration-statement to have
essentially Boolean type.

For example:
typedef unsigned short tudtKalEvents;
#define udtSTOP_EVENT (tudtKalEvents)0x0001;
Code:
if(udtEvents & (tudtKalEvents) udtSTOP_EVENT)
  {
        vidStop();
  }
I think the code is ok, I use the & statement as the conditional expression. As we know, the value is not equal to zero, the condition shall be judged to be true,
why We must use the boolean type?
<t></t>
Reply
#2
Just to be clear, you don't need to use the boolean type, but you need to form a boolean expression, e.g.
Code:
if ((udtEvents & (tudtKalEvents)udtSTOP_EVENT) != 0u)
{
  vidStop();
}
It´s all about avoiding implicit conversion as much as possible.
<t></t>
Reply
#3
MISRA-C introduces a strong typing model to help users avoid unexpected issues which occur in the C typing model.
The rule prevents the accidental use of integer expression when a boolean expression was intended.

To be compliant with MISRA rule 14.4 you should write your test as a boolean expression:
Code:
if((udtEvents & udtSTOP_EVENT) != 0U  )
Posted by and on behalf of the MISRA C Working Group
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)