Article View: fr.comp.lang.c
Article #15006Re: Struct/Union avec les memes champs
From: Harpo
Date: Wed, 19 Oct 2005 13:04
Date: Wed, 19 Oct 2005 13:04
98 lines
4076 bytes
4076 bytes
Marc Boyer wrote:
> Le 19-10-2005, Harpo <trashcan@hotmail.com> a �crit�:
>> Marc Boyer wrote:
>>
>>>
>>> A) Struct qui commencent pareil
>>> Soient
>>> typedef struct { int i; } Si;
>>> typedef struct { int i; char c;} Sic;
>>> int main(){
>>> Sic sic;
>>> Si* psi= (Si*) &sic;
>>> psi->i= 1; // Est-ce l�gal ? Si oui, un ref ?
>>
>> // J'esp�re, Il n'y a rien de plus anodin. Si ce n'�tait pas l�gal
>> les // prisons seraient pleines de programmeurs C.
> Oui, mais j'aurais aim� retrouver une ref. Et je suis assez
> mauvais en recherche dans la norme.
Pour te r�pondre, je me suis bas� sur une question que j'ai pos�e cet
�t� sur fclc, j'ai m�me eu des r�f�rences de la norme.
Dans ton cas, tu as :
( &sic == &(sic.i) )
et ( psi == psi->i )
Cela semble �vident, mais pas tant que �a, car si les structures
semblent devoir respecter un alignement de ses membres, elles
pourraient r�arranger ceux-ci.
Je m'�tais rendu compte que je m'�tais bas� sur cette assertion apr�s
avoir �crit des fonctions qui �tait bas�es l�-dessus, on m'a tout de
suite rassur� sur fclc.
Donc n'angoisse pas � ce sujet.
>
> Oui, mais j'aurais aim� retrouver une ref. Et je suis assez
> mauvais en recherche dans la norme.
>
>>> }
>>>
>>> B) Union avec les m�me champs
>>> #include <assert.h>
>>> typedef struct {
>>> int i;
>>> union {
>>> char j;
>>> char k;
>>> };
>>> } foo;
>>> int main(){
>>> foo f;
>>> f.j= 'a';
>>> assert( f.j == f.k); // Est-ce l�gal ? Si oui, ref ?
>>
> Sauf que f.k n'a peut-�tre pas �t� initialis�, donc, UB.
Ce serait tordu, je n'ai pas de ref, mais si ce n'�tait pas dans la
norme, cela voudrait die que
union {
char j;
char k;
};
ne serait pas �quivalent � :
union {
char k;
char j;
};
Je ne pense pas que quelqu'un ait �crit un compilo assez tordu pour
faire accepter cela dans la norme.
>
>> Je pense m�me que l'on peut dire :
>> assert( &(f.j) == &(f.k) ) quelque soit leur type du fait qu'ils sont
>> au d�but de l'union.
>
> C'est mon intuition en effet, et si on a &X == &Y, X et Y de m�me
> type, alors X == Y.
C'est souhaitable sur une machine non-approximative.
>
> Je sais plus de quand datent les unions anonymes. Je les ai
> d�couvert r�cemment en ce qui me concerne.
C'est Pierre Habouzit qui me les fait d�couvrir il y a peu. J'ai regard�
sur la doc de GCC, c'est je crois pr�sent� comme une extension, comme
d'autres extensions maintenant dans la norme C99.
Je ne pense pas que cela soit une bonne mani�re de faire bien que cela
apporte une facilit� d'�criture.
Cela du fait que 2 structures englob�es dans une autre structure ne
pourraient pas contenir des champs de m�me nom ni un nom utilis�e dans
la structure les englobant. De plus souvent lorsque l'on fait des
structures, c'est souvent pour les utiliser plusieurs fois et de toute
mani�re la facilit� apport�e est illusoire.
Technical Details
Message-ID:
<43564458$0$1747$8fcfb975@news.wanadoo.fr>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!193.252.118.146.MISMATCH!news.wanadoo.fr!news.wanadoo.fr!not-for-mailReferences:
<slrndlbo6u.9sr.Marc.Boyer@localhost.localdomain> <435613e5$0$1716$8fcfb975@news.wanadoo.fr> <slrndlcd38.a9d.Marc.Boyer@localhost.localdomain>Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,eb7f26af12505976 X-Google-Attributes: gidf9822,public X-Google-Language: FRENCH,ASCII Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!193.252.118.146.MISMATCH!news.wanadoo.fr!news.wanadoo.fr!not-for-mail Message-ID: <43564458$0$1747$8fcfb975@news.wanadoo.fr> From: Harpo <trashcan@hotmail.com> Subject: Re: Struct/Union avec les memes champs Newsgroups: fr.comp.lang.c Date: Wed, 19 Oct 2005 15:04:22 +0200 References: <slrndlbo6u.9sr.Marc.Boyer@localhost.localdomain> <435613e5$0$1716$8fcfb975@news.wanadoo.fr> <slrndlcd38.a9d.Marc.Boyer@localhost.localdomain> Organization: ARG ; Association pour la Rehabilitation du Goto User-Agent: KNode/0.8.2 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8Bit Lines: 99 NNTP-Posting-Date: 19 Oct 2005 15:04:24 CEST NNTP-Posting-Host: 86.195.226.91 X-Trace: 1129727064 news.wanadoo.fr 1747 86.195.226.91:32905 X-Complaints-To: abuse@wanadoo.fr