On Tue, Dec 02, 2008 at 07:30:02AM -0800, Hani Ayoub wrote: > >>>> tst.h > >>>> ======= > >>>> typedef struct _tst{ > >>> ... > >>>> } tst; > >>> > >>>> tst2.h > >>>> ======= > >>>> #include "tst.h" > >>>> > >>>> int foo(tst t); > >>> > >>>> tst.c > >>>> ======= > >>>> #include <stdio.h> > >>>> #include "tst2.h" > >>>> > >>>> int foo(tst t){ return 1; }; ... > What I'm trying to do is "forward declaration"; means to hide tst struct > definition from source or header files that includes tst2.h file. Then you'll want to remove #include "tst.h" from tst2.h -- struct _tst is exactly what you want to hide from tst2.h and tst.c -- and make typedef struct _tst tst available somewhere. I personally would put typedef struct _tst tst in tst.h and hide struct _tst declaration within something like #ifdef INTERNAL_TST ... #endif: tst.h ===== #ifdef INTERNAL_TST struct _tst { ... }; #endif typedef struct _tst tst; user.h ====== #include "tst.h" int foo(tst t); user.c ====== #include "user.h" int foo(tst t){ return 1; } This would provide the same header for both API-providing and API-using modules. With kind regards, -- Baurzhan Ismagulov http://www.kz-easy.com/