<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p><font face="Arial">Pobere. A já myslím, že je to dobře. Přece v
té druhé struktuře x_ext říkám, že se skládá z proměnné x typu y
(co je y jsem definoval předtím) a dále s proměnné c typu int a
proměnné d typu int.</font></p>
<p><font face="Arial">Ale ten zápis, kde místo typu použiji slovo
struct pobere taky. Příkaz sizeof(x_ext) vrátí 4, což odpovídá
délce c + d. Zřejmě tu řádku struct x; zahodí jako nesmysl.<br>
</font></p>
<pre class="moz-signature" cols="72">Martin Záruba</pre>
<div class="moz-cite-prefix">Dne 8.5.2024 v 10:43 Jaroslav Buchta
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:26bd9c2e-ea7d-44ea-9b7a-fda6127af94a@hascomp.cz">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<div class="moz-cite-prefix">Ted jsem se do toho zamotal teda
taky, musel bych si to vyzkouset.</div>
<div class="moz-cite-prefix">Ale mam podezreni, ze <br>
</div>
<div class="moz-cite-prefix">struct{ <br>
struct x; <br>
int c; <br>
int d; <br>
}x_ext; <br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">vytvori strukturu x s delkou 0B a
nicim uvnitr a nijak nesouvisi s globalni promennou x ? Zkusil
bych udelat ruzne identifikatory.<br>
</div>
<div class="moz-cite-prefix">V tom novem prikladu to prekladac
pobere? Nemelo by byt: struct y x; ?</div>
<div class="moz-cite-prefix">Protoze y je jmeno struktury a x v
prvnim bloku je instance promenne te struktury myslim...<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">Dne 08.05.2024 v 10:33 Martin Záruba
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:04eca30c-d8ce-4506-bf70-6a93572bc55d@volny.cz">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<p><font face="Arial">Nějak mi to hlava nebere. Pokud napíšu:</font></p>
<div
style="color: #4e5b61;background-color: #ffffff;font-family: Consolas, 'Courier New', monospace;font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;"><div><span
style="color: #00979d;">struct</span><span
style="color: #4e5b61;"> y</span><span style="color: #434f54;">{</span></div><div><span
style="color: #4e5b61;"> </span><span style="color: #00979d;">size_t</span><span
style="color: #4e5b61;"> size;</span></div><div><span
style="color: #4e5b61;"> </span><span style="color: #00979d;">int</span><span
style="color: #4e5b61;"> a;</span></div><div><span
style="color: #4e5b61;"> </span><span style="color: #00979d;">int</span><span
style="color: #4e5b61;"> b;</span></div><div><span
style="color: #434f54;">}</span><span style="color: #4e5b61;">x;</span></div>
<div><span style="color: #00979d;">struct</span><span
style="color: #434f54;">{</span></div><div><span
style="color: #4e5b61;"> y x;</span></div><div><span
style="color: #4e5b61;"> </span><span style="color: #00979d;">int</span><span
style="color: #4e5b61;"> c;</span></div><div><span
style="color: #4e5b61;"> </span><span style="color: #00979d;">int</span><span
style="color: #4e5b61;"> d;</span></div><div><span
style="color: #434f54;">}</span><span style="color: #4e5b61;">x_ext; </span></div></div>
<p><font face="Arial">říkám že struktura x_ext má na začátku
strukturu x kterou popisuje y. Pak se na prvky v ní mohu
odkazovat </font></p>
<p><font face="Arial">x_ext.x.a</font></p>
<p><font face="Arial">ale pokud místo y v druhé struktuře
použiju slovo struct, znamená to, že vznikne to samé, ale
prvky z první struktury jsou nedostupné? Pokud ano, k čemu
je to dobré? </font></p>
<p><font face="Arial">Pokud to ale udělám, tak, jak jsem to
napsal, vznikly dvě proměnné x a x_ext. Logicky pokud změním
x.a nezmění se x_ext.x.a. Takže to nejde takto použít.<br>
</font></p>
<p><font face="Arial">Jenže já potřebuji, aby se původní
struktura, v našem příkladu x </font></p>
<p><font face="Arial">1) rozšířila o prvky c, d přičemž všechny
prvky (nejen ty nové) byly dostupné</font></p>
<p><font face="Arial">2) aby struktura obsazovala souvislou
oblast paměti. Tato oblast se pak předává jako pointer a
délka rutině, která přes ethernet data přenese na server. Je
docela složitá a nechci, aby se do ní muselo vrtat. Pouze
zavolat s těmito dvěma parametry.<br>
</font></p>
<pre class="moz-signature" cols="72">Martin Záruba</pre>
<div class="moz-cite-prefix">Dne 8.5.2024 v 9:34 Jaroslav Buchta
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:c6cf51c2-8ffd-4350-be33-080a1e636042@hascomp.cz">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<div class="moz-cite-prefix">x ale neni promenna ale jmeno
struktury. To je to same, jako byste ji tam rozepsal treba
jako mam v prikladu.<br>
</div>
<div class="moz-cite-prefix">promenna treba y by se definovala
<br>
</div>
<div class="moz-cite-prefix">struct x y;<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">Dne 08.05.2024 v 9:30 Martin
Záruba napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:227a9b36-2b3c-4585-bbbc-1a48fb729252@volny.cz">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<p><font face="Arial">Tomu rozumím, ale nějak mi nedochází,
co vznikne z. Do struktury pochopitelně mohu vložit
další strukturu, ale co se stane, když vložím PROMĚNNOU
typu struct, což je v té druhé definici.<br>
</font></p>
<p>struct{ <br>
size_t size; <br>
int a; <br>
int b; <br>
}x; <br>
<br>
struct{ <br>
struct x; <br>
int c; <br>
int d; <br>
}x_ext; </p>
<p><font face="Arial">Tedy co vlastně obsahuje x_ext<br>
</font></p>
<pre class="moz-signature" cols="72">Martin Záruba</pre>
<div class="moz-cite-prefix">Dne 8.5.2024 v 9:09 Jaroslav
Buchta napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:17fb8aac-bf5f-4a35-9d28-4e8afbdc02ac@hascomp.cz">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<div class="moz-cite-prefix">size je tam podle me pro
kontrolu, ze je struktura spravneho typu a navic si pak
muze funkce rozlisit, jakeho konkretniho typu, pokud je
vic variant. Pokud potrebuje jen tu zakladni, tak ta je
k dispozici vzdy, pokud chce pristupovat na nejake
rozsireni, mela by si aspon zkontrolovat velikost,
jestli nesaha mimo.</div>
<div class="moz-cite-prefix">A soucasti struktury mohou
byt dalsi struktury, uniony, pole... To prekladac
pochopi spravne a proste to tam vlozi. Pokud je vlozena
struktura nepojmenovana, pristupuje se k prvkum jako by
to struktura nebyla, predpokladam.</div>
<div class="moz-cite-prefix">takze kdyz napisu:</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">union {</div>
<div class="moz-cite-prefix"> struct {</div>
<div class="moz-cite-prefix"> int a;</div>
<div class="moz-cite-prefix"> int b;<br>
</div>
<div class="moz-cite-prefix"> };</div>
<div class="moz-cite-prefix"> char c[256];<br>
</div>
<div class="moz-cite-prefix">} u;<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">tak muzu psat u.x[0] = 1;
u.a = 123; ...</div>
<div class="moz-cite-prefix">samozrejme musi byt ruzne
identifikatory, typicky je to zajisteno nejakym
prefixem.<br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">Dne 08.05.2024 v 7:58 Martin
Záruba napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:dda96738-e877-495e-8a3f-55444b69fc18@volny.cz">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<p><font face="Arial">Nějak mám dlouhé vedení....</font></p>
<p><font face="Arial">K čemu je size_t size; v
strukturách?</font></p>
<p><font face="Arial">Jak se při použití x_ext v
posledním zápisu struktury dostanu na prvek a? Není
mi jasné, co kompilátor vytvořil z poslední definice
x_ext, protože neřve. Ale x přece není popis
struktury, ale proměnná typu struct<br>
</font></p>
<p><font face="Arial"><br>
</font></p>
<pre class="moz-signature" cols="72">Martin Záruba</pre>
<div class="moz-cite-prefix">Dne 7.5.2024 v 23:27
Miroslav Šinko napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:47c3281b-ac77-3b9a-c947-8a4a67857971@gmail.com">Inspirujte sa
napr. vo WinAPI. Nejdem nic kopirovat, napisem pointu:
<br>
<br>
struct{ <br>
size_t size; <br>
int a; <br>
int b; <br>
}x; <br>
<br>
Potom si niekto moze spravit: <br>
struct{ <br>
size_t size; <br>
int a; <br>
int b; <br>
int c; <br>
int d; <br>
}x_ext; <br>
<br>
Aby nebolo treba copy/paste, tak takto: <br>
struct{ <br>
struct x; <br>
int c; <br>
int d; <br>
}x_ext; <br>
<br>
Kazdy je povinny pri naplnani struktury vyplnit
size=sizeof(<moja_struktura>) a pri pouziti si
skontrolovat size, ci mozem pristupovat na premenne
svojej struktury. <br>
<br>
miro <br>
<br>
<br>
On 7.5.2024 18:02, Martin Záruba wrote: <br>
<blockquote type="cite">Mám soubor, třeba muj.h ve
kterém je deklarovaná struktura x, třeba <br>
<br>
struct{ <br>
inta; <br>
int b; <br>
}x; <br>
<br>
Soubor je pomocí include vložen do hlavního
programu. A já bych potřeboval, aby uživatel, který
použije #include muj.h mohl do té struktury vložit
další prvky, takže struktura by se o tyto prvky
(které v ní nejsou definované) rozšířila. Vymyslel
jsem toto: <br>
<br>
structstru { <br>
inta; <br>
int b; <br>
#ifdefuser <br>
user <br>
#endif <br>
}; <br>
<br>
A v uživatelském programu použít <br>
<br>
#defineuser\ <br>
intc; \ <br>
intd; <br>
<br>
Asi to vypadá jako divný požadavek, ale mě jde o to,
aby struktura x byl jeden prvek, který obsahuje jak
mé, tak uživatelem vytvořené členy. <br>
<br>
Je na tom něco v nepořádku nebo to lze udělat líp? <br>
<br>
<br>
-- <br>
<br>
Martin Záruba <br>
<br>
<br>
<br>
_______________________________________________ <br>
HW-list mailing list - sponsored by <a
class="moz-txt-link-abbreviated"
href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a>
<br>
<a
class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:Hw-list@list.hw.cz"
moz-do-not-send="true">Hw-list@list.hw.cz</a> <br>
<a class="moz-txt-link-freetext"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
<br>
<br>
</blockquote>
_______________________________________________ <br>
HW-list mailing list - sponsored by <a
class="moz-txt-link-abbreviated"
href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a>
<br>
<a
class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:Hw-list@list.hw.cz"
moz-do-not-send="true">Hw-list@list.hw.cz</a> <br>
<a class="moz-txt-link-freetext"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
<br>
</blockquote>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a
class="moz-txt-link-abbreviated" href="http://www.HW.cz"
moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<p><br>
</p>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a
class="moz-txt-link-abbreviated" href="http://www.HW.cz"
moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a
class="moz-txt-link-abbreviated" href="http://www.HW.cz"
moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<p><br>
</p>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a
class="moz-txt-link-abbreviated" href="http://www.HW.cz"
moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a
class="moz-txt-link-abbreviated" href="http://www.HW.cz"
moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<p><br>
</p>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
</body>
</html>