Jeff Abrahamson on Sun, 8 Dec 2002 22:40:08 -0500


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: [PLUG] C question: struct pointer error


On Sun, Dec 08, 2002 at 08:12:33PM -0500, Will Dyson wrote:
> Jeff Abrahamson wrote:
> >>
> >>>   int foo(struct bar *b);
> >>>
> >>>   typedef struct bar {
> >>>	    int a;
> >>>   } Bar;
> >>>
> >>>   foo(Bar *b)
> >>>   {
> >>>	    return 0;
> >>>   }
> 
> >My read of K&R is that, as long as you don't need to know the size of
> >the struct pointer, you don't need to have the definition of the
> >struct available in the current translation unit.
> >
> >The real issue here, since I could just #include bar.h, is that I
> >don't want to #include extraneous files. It slows compilations, risks
> >breaking data abstraction, and risks creating circular dependencies.
> 
> What you need is a forward declaration of struct bar; You are correct that 
>  it does not need the definition, but it must know that struct bar is 
> declared.

Yes, that's it.

I was under the mistaken impression that forward declarations were
neither required nor permitted by the ansi spec. Admittedly this left
a quandary, above.

Thanks.

-- 
 Jeff

 Jeff Abrahamson  <http://www.purple.com/jeff/>
 GPG fingerprint: 1A1A BA95 D082 A558 A276  63C6 16BF 8C4C 0D1D AE4B

Attachment: pgp8kOLurnzrg.pgp
Description: PGP signature