gea@Iago.Caltech.EDU (Gary Ansok) (06/26/87)
At least according to K&R (p. 77), there is no need for fancy #define's to
make sure that global variables are declared and initialized properly.
header.h:
struct foo { ... };
extern int var1;
extern struct foo var2;
file.c:
#include "header.h"
int var1 = 42;
struct foo var2 = { ... };
The disadvantage is that the type of a variable is duplicated in two places
(some mismatches will be detected by the compiler); however, you get cleaner
(and easier to write and understand) code which is, I think, less easy to
misdeclare (what happens if two or zero modules define __GLOB__? -- not that
this is damnfoolproof). You can also spread the initializations around among
modules if you think of a global variable as "owned" by one module and "used"
by other modules (if your program works that way).
Like many other things in programming, especially C programming, this is
something where we can argue for hours. But I thought I'd present a case
with no messy #defines or #ifs.
Gary Ansok
gea@romeo.caltech.edu -- or -- ansok@scivax.arpa