>> EXTERN int my_util_var; // always declared, but only defined if compiling myutils.c All of these ways of tricking the compiler into a definition instead of a declaration are, I think, somewhat questionable. Anything declared at file level has extern linkage, unless all declarations of it within the file are given static linkage. Actually specifying extern linkage does not change the standard semantics. The presence of an initializer is what makes an extern declaration also a definition, at least in C90 ("ANSI C"). What to do when there are declarations but no definitions, or multiple definitions, is up to the implementation and should be documented. The K&R compiler used a "FORTRAN COMMON" model for storage with extern linkage: the lack of initialization put the storage into a section that was initialized to binary zeroes, multiple definitions were treated as last definition wins. A lot of compilers and linkers implement this model, but again, it is implementation dependent. Incidentally, // for comments is a C99-ism. Thanks. --=20 http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .