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