Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #149946
| 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> |
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
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