Dir 4.8 2 struct pointers in a Translation unit

Moderators: misra-c, david ward

Post Reply
misra-c
Posts: 556
Joined: Thu Jan 05, 2006 1:11 pm

Dir 4.8 2 struct pointers in a Translation unit

Post by misra-c » Fri Feb 13, 2015 9:46 am

What happens if there are 2 pointers to a struct/union in a translation unit. One which accesses the details of the struct/union and the other does not. For Example:
File1.h

Code: Select all

  struct X { int32_t i1 };
  typedef struct X * ptrX;
  extern  void use_ptrX ( ptrX p );

File1.c

Code: Select all

  void fn ( ptrX a, ptrX b )
  {     /* no reference to a->i1 in translation unit  - does the type of "a" need to be opaque? */
     use_ptrX ( a );
     use_int32 ( b -> i1 ) ;
 }
---
Posted by and on behalf of
the MISRA C Working Group

misra-c
Posts: 556
Joined: Thu Jan 05, 2006 1:11 pm

Re: Dir 4.8 2 struct pointers in a Translation unit

Post by misra-c » Fri Feb 13, 2015 9:47 am

The implementation of an object need only be hidden if all pointers to that type in a translation unit are never dereferenced and there are no other reasons for the internal details of the structure/union to be known.

In the above example "ptrX a" is complaint, because member “i1” from “struct X” is accessed elsewhere in the translation unit.
---
Posted by and on behalf of
the MISRA C Working Group

Post Reply

Return to “7.4 Code design”