A Deficiency of the C Preprocessor - (nf)
Clayton Cramer
cramer at kontron.UUCP
Tue Dec 30 10:51:47 AEST 1986
> > I've got a complaint about the C preprocessor -- I doesn't support a
> > repetition for initializing data structures.
> >
> > We are developing programs where an array of structures exists.
> >
> > #define BRKPTCOUNT 5
> > struct .... FooBar[BRKPTCOUNT] = {....};
> >
> > Everytime we change BRKPTCOUNT, we have to change the initialization data
> > for FooBar; if we give extra initialization data, we get complaints from the
> > compiler; if we don't give enough data, the rest of the structure isn't
> > initialized.
>
> Why don't you write your structures and defines like this:
>
> #define BRKPTCOUNT (sizeof (FooBar)/sizeof (FooBar[0]))
> struct ... FooBar [] = { ... } ;
>
> Then your array will be maid as large as needed to fit your data.
> The size of the array (defined by BRKPTCOUNT) will be computed during
> compile time, since sizeof is a compile time function and the whole
> expression is constant.
>
The ARRAY ends up big enough -- but only the number of initializing values
are actually inserted into the array (at least under BSD 4.2).
Clayton E. Cramer
"You cannot bring about prosperity by discouraging thrift. You cannot
strengthen the weak by weakening the strong. You cannot help the wage
earner by pulling down the wage payer. You cannot further the brother-
hood of man by encouraging class hatred. You cannot keep of out of
trouble by spending more than you earn. You cannot build character and
courage by taking away man's initiative and independence. You cannot
help men permanently by doing for them what they could and should do
for themselves." -- Abraham Lincoln
More information about the Comp.lang.c
mailing list