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


Groups > comp.lang.c > #149946

Re: Offsetof with array elements

From Guillaume <message@bottle.org>
Newsgroups comp.lang.c
Subject Re: Offsetof with array elements
Date 2020-02-11 16:08 +0100
Organization Aioe.org NNTP Server
Message-ID <r1ug0k$fvk$1@gioia.aioe.org> (permalink)
References <r1udrq$hoe$1@dont-email.me>

Show all headers | View raw


Le 11/02/2020 à 15:31, David Brown a écrit :
> #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.

 From what I read: "The type and member designator shall be such that 
given static type t; then the expression &(t.member-designator) 
evaluates to an address constant. (If the specified member is a bit-field, 
the behavior is undefined.)"

In your example, &(t.a[i]) would evaluate to an address constant indeed, 
and obviously a[i] doesn't fall into the undefined behavior category as 
it's not a bit field.

There's just a small "but": the standard defines offsetof() with its 
second parameter being a struct member designator. a[i] is not, unless 
I'm mistaken, a member designator, but an expression derived from one. 
Thus you'd be using offsetof() with (IMO) an invalid parameter, and this 
should be reasonably rejected by a conforming compiler. It looks like 
some compilers choose to make this implementation-defined instead. Just 
my opinion on this.

Back to comp.lang.c | Previous | Next — Previous in thread | Next 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