dtweed's solution is the most elegant but I favor this (which mostly does the same thing, but is more explicit): --header.h-- #ifndef HEADER_H #ifndef HEADER_C #define EXT extern #endif #define BARLEN 256 EXT int Foo; EXT char Bar[BARLEN]; void Thisfunc((void*)that); #ifndef HEADER_C #undef EXT #endif #define HEADER_H #endif --header.h end-- --header.c-- #include ... #define HEADER_C #include "header.h" --header.c end-- --other.c-- #include "header.h" ... --other.c end-- It works fine. Another option is to duplicate the definitions without extern in a header file with the same name but prefixed with _ e.g. _header.h Ultimately, it is a question of discipline and makefiles to get things right imho. When you do not work alone, the header files should have been written *ages* ago, together with the type definitions and prototypes, imho. Peter P. -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist