Re: Regarding assignment to struct

Liste des GroupesRevenir à cl c 
Sujet : Re: Regarding assignment to struct
De : tr.17687 (at) *nospam* z991.linuxsc.com (Tim Rentsch)
Groupes : comp.lang.c
Date : 06. May 2025, 05:57:47
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <86v7qe2v5g.fsf@linuxsc.com>
References : 1 2 3 4 5 6 7
User-Agent : Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
scott@slp53.sl.home (Scott Lurndal) writes:

Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
>
James Kuyper <jameskuyper@alumni.caltech.edu> writes:
>
On 5/3/25 20:37, Keith Thompson wrote:
>
Lawrence D'Oliveiro <ldo@nz.invalid> writes:
>
On Sat, 3 May 2025 01:14:46 -0700, Andrey Tarasevich wrote:
>
Virtually every C project relies on assignment of structures.
Passing-returning structs by value might be more rare (although
perfectly valid and often appropriate too), but assignment...
assignment is used by everyone everywhere without even giving
it a second thought.
>
There is a caveat, to do with alignment padding:  will this
always have a defined value?
>
I don't believe so.  In a quick look, I don't see anything in
the standard that explicitly addresses this, but I believe that a
conforming implementation could implement structure assignment by
copying the individual members, leaving any padding in the target
undefined.
>
"When a value is stored in an object of structure or union type,
including in a member object, the bytes of the object
representation that correspond to any padding bytes take
unspecified values.56)" (6.2.6.1p6).
>
That refers to footnote 56, which says "Thus, for example,
structure assignment need not copy any padding bits."
>
Yes, that's what I missed.
>
It's interesting that the footnote refers to padding *bits* rather
than padding *bytes*.  I presume this was unintentional.
>
Padding bits:
>
        struct A {
            uint64_t    tlen  : 16,
                              : 20,
                        pkind :  6,
                        fsz   :  6,
                        gsz   : 14,
                        g     :  1,
                        ptp   :  1;
        } s;
>
There are 20 padding bits in this declaration.  Perhaps that's
what they're referring to?

To me it seems clear that the "padding bits" here is meant to refer
to all of the following:

   unoccupied bytes between members, due to member alignment
   unoccupied bytes at the end of a structure or union
   bits corresponding to unnamed bit-field members
   unoccupied bits or bytes caused by explicit bit-field alignment
   unoccupied bits or bytes caused by other bit-field alignment

Any member objects may have their own internal padding bits.  Any
assignment of a struct or union follows the usual rule that any
padding bits that are part of a target member have unspecified
values (as long as the member doesn't become a trap representation
as a result).

Considering all these parts together, I think it makes sense to say
that the padding bits of an object are those bits that do not
participate in determining the abstract value of the object (not
counting that some combination of padding bits might cause the
object to become a trap representation, which never happens for
structs or unions).

(Yes I know that the term "trap representation" has been changed in
later versions of the C standard.  Please make any needed editorial
changes internally, without having to post a followup.)

Date Sujet#  Auteur
2 May 25 * Regarding assignment to struct84Lew Pitcher
2 May 25 +- Re: Regarding assignment to struct1Keith Thompson
2 May 25 +* Re: Regarding assignment to struct13Barry Schwarz
2 May 25 i`* That depends... (Was: Regarding assignment to struct)12Kenny McCormack
3 May 25 i `* Re: That depends... (Was: Regarding assignment to struct)11Lew Pitcher
3 May 25 i  +- Re: That depends... (Was: Regarding assignment to struct)1Lawrence D'Oliveiro
3 May 25 i  +- Re: That depends... (Was: Regarding assignment to struct)1Janis Papanagnou
3 May 25 i  +* Re: That depends... (Was: Regarding assignment to struct)5Kaz Kylheku
3 May 25 i  i+* Re: That depends... (Was: Regarding assignment to struct)3Kaz Kylheku
5 May 25 i  ii`* Re: That depends... (Was: Regarding assignment to struct)2Janis Papanagnou
5 May 25 i  ii `- Re: That depends... (Was: Regarding assignment to struct)1Kaz Kylheku
4 May 25 i  i`- Re: That depends... (Was: Regarding assignment to struct)1Tim Rentsch
3 May 25 i  +- Re: That depends... (Was: Regarding assignment to struct)1James Kuyper
4 May 25 i  `* Re: That depends... (Was: Regarding assignment to struct)2Tim Rentsch
4 May 25 i   `- Re: That depends... (Was: Regarding assignment to struct)1Lew Pitcher
2 May 25 +* Re: Regarding assignment to struct2Waldek Hebisch
3 May 25 i`- Re: Regarding assignment to struct1Lew Pitcher
3 May 25 +* Re: Regarding assignment to struct51Andrey Tarasevich
3 May 25 i+* Re: Regarding assignment to struct9Lawrence D'Oliveiro
4 May 25 ii`* Re: Regarding assignment to struct8Keith Thompson
4 May 25 ii `* Re: Regarding assignment to struct7James Kuyper
4 May 25 ii  +- Re: Regarding assignment to struct1Kenny McCormack
4 May 25 ii  +- Re: Regarding assignment to struct1David Brown
4 May 25 ii  `* Re: Regarding assignment to struct4Keith Thompson
5 May 25 ii   +- Re: Regarding assignment to struct1James Kuyper
5 May 25 ii   +- Re: Regarding assignment to struct1Keith Thompson
6 May 25 ii   `- Re: Regarding assignment to struct1Tim Rentsch
3 May 25 i+- Re: Regarding assignment to struct1Lawrence D'Oliveiro
4 May 25 i`* Re: Regarding assignment to struct40Tim Rentsch
5 May 25 i `* Re: Regarding assignment to struct39Andrey Tarasevich
5 May 25 i  +* Re: Regarding assignment to struct16Michael S
5 May 25 i  i+* Re: Regarding assignment to struct14Andrey Tarasevich
5 May 25 i  ii`* Re: Regarding assignment to struct13Michael S
5 May 25 i  ii +- Re: Regarding assignment to struct1Tim Rentsch
5 May 25 i  ii `* Re: Regarding assignment to struct11Andrey Tarasevich
5 May 25 i  ii  +* Re: Regarding assignment to struct2Michael S
6 May 25 i  ii  i`- Re: Regarding assignment to struct1Tim Rentsch
5 May 25 i  ii  `* Re: Regarding assignment to struct8Keith Thompson
6 May 25 i  ii   +* Re: Regarding assignment to struct2Tim Rentsch
6 May 25 i  ii   i`- Re: Regarding assignment to struct1Keith Thompson
6 May 25 i  ii   +- Re: Regarding assignment to struct1David Brown
6 May 25 i  ii   `* Re: Regarding assignment to struct4Waldek Hebisch
6 May 25 i  ii    +* Re: Regarding assignment to struct2David Brown
7 May 25 i  ii    i`- Re: Regarding assignment to struct1David Brown
6 May 25 i  ii    `- Re: Regarding assignment to struct1Keith Thompson
5 May 25 i  i`- Re: Regarding assignment to struct1Tim Rentsch
5 May 25 i  +* Re: Regarding assignment to struct4Keith Thompson
5 May 25 i  i`* Re: Regarding assignment to struct3Andrey Tarasevich
8 May 25 i  i `* Re: Regarding assignment to struct2Tim Rentsch
8 May 25 i  i  `- Re: Regarding assignment to struct1David Brown
5 May 25 i  +* Re: Regarding assignment to struct15Keith Thompson
5 May 25 i  i+* Re: Regarding assignment to struct6Michael S
5 May 25 i  ii+- Re: Regarding assignment to struct1Kenny McCormack
5 May 25 i  ii+* Re: Regarding assignment to struct3Keith Thompson
5 May 25 i  iii`* Re: Regarding assignment to struct2Kaz Kylheku
6 May 25 i  iii `- Re: Regarding assignment to struct1Tim Rentsch
6 May 25 i  ii`- Re: Regarding assignment to struct1Tim Rentsch
5 May 25 i  i`* Re: Regarding assignment to struct8Tim Rentsch
5 May 25 i  i `* Re: Regarding assignment to struct7Keith Thompson
6 May 25 i  i  `* Re: Regarding assignment to struct6Nick Bowler
6 May 25 i  i   `* Re: Regarding assignment to struct5Keith Thompson
7 May 25 i  i    `* Re: Regarding assignment to struct4Nick Bowler
7 May 25 i  i     +* Re: Regarding assignment to struct2Keith Thompson
8 May 25 i  i     i`- Re: Regarding assignment to struct1Nick Bowler
8 May 25 i  i     `- Re: Regarding assignment to struct1Tim Rentsch
5 May 25 i  +* Re: Regarding assignment to struct2Tim Rentsch
5 May 25 i  i`- Re: Regarding assignment to struct1David Brown
12 May 25 i  `- Re: Regarding assignment to struct1NotAorB
3 May 25 +* Re: Regarding assignment to struct8David Brown
5 May 25 i`* Re: Regarding assignment to struct7Muttley
5 May 25 i +- Re: Regarding assignment to struct1David Brown
5 May 25 i `* Re: Regarding assignment to struct5Keith Thompson
6 May 25 i  +- Re: Regarding assignment to struct1Muttley
6 May 25 i  +* Re: Regarding assignment to struct2David Brown
6 May 25 i  i`- Re: Regarding assignment to struct1Muttley
6 May 25 i  `- Re: Regarding assignment to struct1Michael S
4 May 25 +* Re: Regarding assignment to struct6Richard Damon
4 May 25 i`* Re: Regarding assignment to struct5Michael S
4 May 25 i +* Re: Regarding assignment to struct2Lawrence D'Oliveiro
4 May 25 i i`- Re: Regarding assignment to struct1David Brown
6 May 25 i +- Re: Regarding assignment to struct1Tim Rentsch
12 May 25 i `- Re: Regarding assignment to struct1Rosario19
4 May 25 +- Re: Regarding assignment to struct1Tim Rentsch
4 May 25 `- Re: Regarding assignment to struct1Keith Thompson

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal