6.11 Pointer Type Conversions
Moderators: misra-c, david ward
- Posts: 20
- Joined: Fri Jul 27, 2007 3:25 pm
In the mc2_1102.c file there is a following example:
Code: Select all
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.
- Posts: 10
- Joined: Fri Jul 13, 2007 1:13 pm
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.
Embeded Software developer since 85.