Rule 11.2 and example from Exemplar Suite

6.11 Pointer Type Conversions

Moderators: misra-c, david ward

Locked
pkruk
Posts: 20
Joined: Fri Jul 27, 2007 3:25 pm

Rule 11.2 and example from Exemplar Suite

Post by pkruk » Tue Jan 08, 2008 12:35 pm

In the mc2_1102.c file there is a following example:

Code: Select all

   float32_t float32_1102;
   void *void_ptr = ( void * ) get_int32_ptr ( );
   float32_1102 = ( float32_t ) void_ptr;           /* Not Compliant */
Is the conversion between void pointer and a float type object disallowed by the 11.2 rule?

According to my understanding the rule 11.2 disallows conversions only if we are converting to or from a pointer to object.
float type is clearly not a pointer to object type.
Pointer to void is not a pointer to object type, because void is not an object (it's an incomplete type).

Please correct me if my understanding is not correct.

George Brown
Posts: 10
Joined: Fri Jul 13, 2007 1:13 pm

Post by George Brown » Wed Jan 09, 2008 4:43 pm

Hi pkruk

Re-writing the rule into a list of positives, I think we get.

Conversions can be performed between a pointer to object and an integral type. But see 11.3 - also requires a cast.

Conversions can be performed between a pointer to object and another pointer to object type. But see 11.4 also requires a cast.

Conversions can be performed between a pointer to object and a pointer to void. Cast not required.

All other conversions are not allowed.

Therefore the following is true.

Conversions shall not be performed between a pointer to any and a float type.

Having said that, is there ever a case when you would want to convert an address to a floating point number? Do remember that not all binary patterns are legal floating point numbers, and (certain) processors can reset on such patterns.

George
Embeded Software developer since 85.

Locked

Return to “6.11 Pointer Type Conversions”