Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
MISRA C - Rule 12.12
#1
Just wanted to know if Line 3 in the following case is a violation for Rule 12.12 ...??

1. int i;
2. float f=2.1;
3. i=(int)f >>2; //Typecasting should actually take care of the bit implementation of floats

Also, If its a violation to Rule 12.12..Does that mean all typecasts (from float to any other type) should also be considered as violationg this rule..?
<t></t>
Reply
#2
In my opinion, Rule 12.12 intends to prevent direct access to the representation of floating-point values. This might typically be achieved using either a union or pointer casts, for example:

Code:
unsigned int tmp = *(unsigned int *)&f; /* get the float as 32-bit int */
tmp = tmp ^ 0x80000000;  /* flip the sign bit */
f = *(float *)&tmp;  /* store the result back */

I don't think that casting a floating-point value to int violates Rule 12.12 because there is no direct access to the representation of the value. In addition, the conversion is well-defined in that the floating point value is truncated towards zero with the result being undefined only if the truncated value won't fit in the integer type.
<t></t>
Reply
#3
This example does not violate rule 12.12 as there is no access to the underlying floating representation as discussed by Steve in a previous post.
Posted by and on behalf of the MISRA C Working Group
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)