strings in defs.h force recompiles when changed.

Gary M. Samuelson garys at bunker.UUCP
Fri Nov 2 04:36:23 AEST 1984

Jerry Aguirre doesn't like

> file defs.h:
> 	#define NEWS_VERSION   "B 2.10.2 9/5/84"
> 	#define DFLTSUB "general,all.general"
> 	...

(and I agree with his reasons), and suggests two files, defs.h
and strings.c, where strings.c defines an array of pointers
to strings such as:

> 	char *strings[] = {
> 	    "B 2.10.2 9/5/84",
> 	    "general,all.general",
>	    ...
> 	};
> And the defs.h file now looks like:
> 	extern char *strings[];
> 	#define NEWS_VERSION	strings[0]
> 	#define DFLTSUB		strings[1]
> 	...

I suggest instead a defs.h with entries such as:

	extern char *NEWS_VERSION;

and a strings.c file with

	char *NEWS_VERSION = "B 2.10.2 9/5/84";

1. The order in which strings appear is not important.
2. The name of the string is meaningful to symbolic debuggers.
3. 'lint' can tell if strings are being defined but not used.
4. Only one copy of each string.
5. Changing a string doesn't force recompilation of every file
   which includes defs.h.

(the last two advantages are shared by Jerry's model).

?? If there were any, I would be the first to admit it :-)

Gary Samuelson

More information about the Comp.lang.c mailing list