Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Does 11.4 apply to any pointer or just object pointers?
#1
The scope of Rule 11.4 is unclear. The headline text for Rule 11.4 uses the phrase "pointer to object", the amplification just uses "pointer", and the rationale uses both phrases. Is this rule intended to apply to pointers to functions and pointers to incomplete types? In other words, are the following violations of this rule?

Code:
void *vp        = 1;
int (*fp)(void) = 1;

If the answer is "yes", then does the exception for null pointer constants (which also uses the phrase "pointer to object") apply to all pointers or just pointers to objects? E.g.:

Code:
int *ip         = 0;  // Okay, allowed by exception
void *vp        = 0;  // Okay?
int (*fp)(void) = 0;  // Okay?
<t></t>
#2
This rule only applies to object pointers, as other types of pointers are covered by other rules.

We will consider clarifying the amplification to read:
An object pointer should not be converted into an integer.
An integer should not be converted into an object pointer.

Code:
void *vp        = 1;   /* Constraint error in C90 and C99; violates rule 1.1 */
       int (*fp)(void) = 1;   /* Constraint error in C90 and C99; violates rule 1.1 */
  
        /* The following will all violate 11.9 */
       int *ip         = 0;  /* compliant with 11.4 exception  */
       void *vp        = 0;  /* compliant with all other section 11 rules */
       int (*fp)(void) = 0;  /* 11.4 does not apply, compliant with 11.1 exception */
Posted by and on behalf of the MISRA C Working Group
#3
The proposed changes to the amplification were included in MISRA C:2012 TC1 (2016)
Posted by and on behalf of the MISRA C Working Group


Forum Jump:


Users browsing this thread: 5 Guest(s)