This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Access Struct variable from

Hello,

My project contains several files:

main.c
routines.c
config.h
etc.

In the main.c I make a structure like:

xdata struct StructUserRec{
		BYTE	XPIDNr[9];
		char	UserName[15];
		BYTE	ContrHour;
		BYTE	ContrMin;
		BYTE	WorkedHour;
		BYTE	WorkedMin;
		};

xdata struct StructUserRec UserRec[10];

In Config.H is the declaration:
extern struct StructUserRec UserRec[10];

How can I access this structure from Routines.C? I know how to do this with other variables. But it doesn't work.

My compiler gives an error like:
ROUTINES.C(75): error C230: 'StructUserRec': unknown struct/union/enum tag

How can you make structures accessible from different .C files?

Thanks in advance,

M. Joosse

Parents Reply Children
  • You can cast pointers to struct types among each other, as long as one struct type is just an extended version of the other. So you can have a "dummy struct type" exported by the header, with all the private data removed from view by a pointer cast:

    lib.h:

    struct dummy {
       int magic_cookie;
    };


    lib.c:

    struct real {
       int magic_cookie;
       /* private data: */
       double whatever;
       char lotofstuff[512];
       /* ... */
    };

    The exported interface would use pointers to struct dummy, which are cast into pointers to struct real by the implementation (in lib.c) whenever the private members are needed:

    foo_func(struct dummy *this) {
      struct real *real_this = (struct real *) this;
    
      real_this->whatever = 5.25;
    }
    

    The magic cookie provides a bit of protection against the potential evil of any explicit pointer cast.

  • "as long as one struct type is just an extended version of the other"

    Nice trick, never though about this one!

    Thanks Hans!

    -- Geert