On Fri, Nov 27, 2009 at 6:15 PM, Bernd Petrovitsch <[email protected]> wrote:

> On Fri, 2009-11-27 at 18:07 +0530, Anuz Pratap Singh Tomar wrote:
> > On Fri, Nov 27, 2009 at 5:56 PM, Bernd Petrovitsch <[email protected]>
> > wrote:
> >         On Fri, 2009-11-27 at 17:50 +0530, Anuz Pratap Singh Tomar wrote:
> >         [...]
> >         > I have came across, this kind of structure initialization for
> the
> >         > first time:
> >
> >         [...]
> >         >         [ICMP_ADDRESSREPLY] = {
> >         >                 .output_entry = ICMP_MIB_OUTADDRMASKREPS,
> >         >                 .input_entry = ICMP_MIB_INADDRMASKREPS,
> >         >                 .handler = icmp_address_reply,
> >         >         },
> >         > };
> >         >
> >         >
> >         > I am not sure what those indexes are for: for example
> >         > [ICMP_ADDRESSREPLY].
> >
> >         You tell the C compiler that the above element should be at index
> >         ICMP_ADDRESSREPLY (which must be a compile-time constant of
> course and
> >         counting starts with 0 - as always in C).
> >
> > But why is implicit indexing required, it would anyways be indexed
> I assume you meant "explicit indexing" (and not implicit)
>

oops! yes.

> >  from 0?
> With the above, you guarantee that the above element is always at the
> same place (read: the same offset in the array).
> It avoids changes (read: bugs and problems) if someone inserts a new
> field at that begin of the definition (and you get off-by-1 errors
> without a change).
>
> It's probably not the case for above but: Constants may be different on
> different architectures (for whatever reason, hardware dictated,
> historically grown, compatible to other OSs there, ...). And the above
> is an elegant and pretty robust solution without duplicating lots of
> source (because each arch defines it on their own somewhere) or
> cluttering the source with #ifdef's, assert()s and the like just to make
> sure that an array element is at the correct offset.
>
> Thanks, that explains.

Reply via email to