Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #150062

Re: Offsetof with array elements

From "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com>
Newsgroups comp.lang.c
Subject Re: Offsetof with array elements
Date 2020-02-16 16:03 -0800
Organization Aioe.org NNTP Server
Message-ID <r2cl93$1pgc$1@gioia.aioe.org> (permalink)
References <r1udrq$hoe$1@dont-email.me>

Show all headers | View raw


On 2/11/2020 6:31 AM, David Brown wrote:
> #include <stddef.h>
> 
> struct S {
>      int a[10];
> };
> 
> int test(int i) {
>      return offsetof(struct S, a[i]);
> }
> 
> 
> Is this allowed in standard C?  It works in most compilers I tried (even
> in the most pedantic modes I checked on gcc), but failed in one embedded
> compiler.  According to the standard, "offsetof" expands to "an integer
> constant expression", and "&s.a[i]" must evaluate to an address constant
> (where "s" is an object of type "struct S").
> 
> So by my reading, the standard C does not require the expression in
> "test" to be valid, and allows a conforming compiler to reject it.
> Equally, it does not require a diagnostic, and allows a conforming
> compiler to accept it without complaint.
> 

Don't know exactly why, but this reminds me of the following macro that 
can determine the alignment of a type:

#define RALLOC_ALIGN_OF(mp_type) \
    offsetof( \
      struct { \
        char pad_RALLOC_ALIGN_OF; \
        mp_type type_RALLOC_ALIGN_OF; \
      }, \
      type_RALLOC_ALIGN_OF \
    )

Back to comp.lang.c | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

Offsetof with array elements David Brown <david.brown@hesbynett.no> - 2020-02-11 15:31 +0100
  Re: Offsetof with array elements Guillaume <message@bottle.org> - 2020-02-11 16:08 +0100
    Re: Offsetof with array elements James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-02-11 08:32 -0800
      Re: Offsetof with array elements David Brown <david.brown@hesbynett.no> - 2020-02-11 18:46 +0100
        Re: Offsetof with array elements Manfred <noname@add.invalid> - 2020-02-11 19:24 +0100
          Re: Offsetof with array elements Manfred <noname@add.invalid> - 2020-02-11 19:36 +0100
          Re: Offsetof with array elements James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-02-11 22:50 -0500
            Re: Offsetof with array elements Manfred <noname@add.invalid> - 2020-02-12 13:53 +0100
            Re: Offsetof with array elements Tim Rentsch <tr.17687@z991.linuxsc.com> - 2020-02-18 01:43 -0800
    Re: Offsetof with array elements Tim Rentsch <tr.17687@z991.linuxsc.com> - 2020-02-18 01:39 -0800
  Re: Offsetof with array elements Bart <bc@freeuk.com> - 2020-02-11 16:56 +0000
    Re: Offsetof with array elements David Brown <david.brown@hesbynett.no> - 2020-02-11 18:49 +0100
  Re: Offsetof with array elements Bonita Montero <Bonita.Montero@gmail.com> - 2020-02-11 21:00 +0100
    Re: Offsetof with array elements Bart <bc@freeuk.com> - 2020-02-11 20:13 +0000
      Re: Offsetof with array elements Bonita Montero <Bonita.Montero@gmail.com> - 2020-02-11 21:24 +0100
        Re: Offsetof with array elements Bart <bc@freeuk.com> - 2020-02-11 20:33 +0000
          Re: Offsetof with array elements Bonita Montero <Bonita.Montero@gmail.com> - 2020-02-11 21:39 +0100
            Re: Offsetof with array elements Bart <bc@freeuk.com> - 2020-02-11 20:48 +0000
    Re: Offsetof with array elements David Brown <david.brown@hesbynett.no> - 2020-02-12 10:56 +0100
      Re: Offsetof with array elements Bonita Montero <Bonita.Montero@gmail.com> - 2020-02-12 14:07 +0100
        Re: Offsetof with array elements David Brown <david.brown@hesbynett.no> - 2020-02-12 15:24 +0100
    Re: Offsetof with array elements Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-02-12 10:39 +0000
      Re: Offsetof with array elements Bonita Montero <Bonita.Montero@gmail.com> - 2020-02-12 14:08 +0100
        Re: Offsetof with array elements James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-02-12 05:29 -0800
          Re: Offsetof with array elements James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-02-12 11:45 -0800
        Re: Offsetof with array elements Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-02-12 17:50 +0000
      Re: Offsetof with array elements Tim Rentsch <tr.17687@z991.linuxsc.com> - 2020-02-16 02:41 -0800
        Re: Offsetof with array elements Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-02-16 11:18 +0000
    Re: Offsetof with array elements already5chosen@yahoo.com - 2020-02-13 02:42 -0800
      Re: Offsetof with array elements James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-02-14 00:20 -0500
        Re: Offsetof with array elements David Brown <david.brown@hesbynett.no> - 2020-02-14 08:24 +0100
          Re: Offsetof with array elements already5chosen@yahoo.com - 2020-02-14 03:59 -0800
            Re: Offsetof with array elements David Brown <david.brown@hesbynett.no> - 2020-02-14 15:25 +0100
              Re: Offsetof with array elements already5chosen@yahoo.com - 2020-02-16 03:15 -0800
                Re: Offsetof with array elements David Brown <david.brown@hesbynett.no> - 2020-02-16 14:09 +0100
                Re: Offsetof with array elements already5chosen@yahoo.com - 2020-02-16 06:36 -0800
          Re: Offsetof with array elements James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-02-15 08:18 -0500
            Re: Offsetof with array elements David Brown <david.brown@hesbynett.no> - 2020-02-15 15:49 +0100
  Re: Offsetof with array elements fir <profesor.fir@gmail.com> - 2020-02-12 04:40 -0800
  Re: Offsetof with array elements "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2020-02-16 16:03 -0800

csiph-web