<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div>Dobry den,</div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span><br></span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span>&gt; Hmm než jsem to dopsal, tak toto od pana Augustýna by mohlo fungovat.<br><span style="background-color: transparent;">&gt; (*pProgEEpr).EndProgram = 1;</span><br></span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span><span style="background-color: transparent;"><br></span></span></div><div style="color: rgb(0, 0, 0); font-size: 16px;
 font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span><span style="background-color: transparent;">protoze v danem programu se ziskava adresa promenne typu union a dereferencuje se pointer na promennou typu union, tak<br></span></span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span style="background-color: transparent;">pProgEEpr-&gt;EndProgram = 1;</span><br></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span style="font-size: 12pt;">bude fungovat.</span><br></div><div><br></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;">Radovan
 Augustin</div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><br></div>  <div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt;"> <div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt;"> <div dir="ltr"> <hr size="1">  <font size="2" face="Arial"> <b><span style="font-weight:bold;">From:</span></b> Josef Štengl &lt;ok1ced@nagano.cz&gt;<br> <b><span style="font-weight: bold;">To:</span></b> HW-news &lt;hw-list@list.hw.cz&gt; <br> <b><span style="font-weight: bold;">Sent:</span></b> Saturday, April 27, 2013 2:26 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: C _ jak rozepsat řádek<br> </font> </div> <div class="y_msg_container"><br>On v nich trošku plave skoro každý :-)<br><br>To jak máte napsáno „// tohle je OK“, tak to je v pořádku protože
 <br>pracujete s ukazatelem na strukturu, kterou derefenrecujete a <br>přistupujete k ní jako ke struktuře resp. přímo k položce struktury. Ten <br>typ položky je důležitý, protože položky nazvané Bit[0-7] jsou položky <br>bitového pole, a položka bitového pole nemá adresu, takže na něj nelze <br>vytvořit ukazatel. Viz pozn. 106 dokumentu n1256: (C99 draft)<br><br>The unary &amp; (address-of) operator cannot be applied to a bit-field <br>object; thus, there are no pointers to or arrays of bit-field objects.<br><br>Takže se pak přes ukazatel snažíte získat adresu položky pole, která je <br>ovšem položka bitového pole a ten nemá adresu a skončí to chybou.<br><br>Dále jen poznámky pod čarou. Pokud vás rozčílí, tak si jich nevšímejte:<br><br>Název unionu začíná podtržítkem, což má jazyk C rezervovaný pro budoucí <br>použití. Podtržítka na začátku čehokoliv v aplikačních programech
 <br>nepoužívat!<br><br>Zvážil bych použití bitového pole ve stylu<br><br><a href="http://c-faq.com/misc/bitsets.html" target="_blank">http://c-faq.com/misc/bitsets.html</a><br><br>Jen k tomu mám poznámku, že char by měl být unsigned char, protože by se <br>neměly provádět bitové operace na znaménkových typech. Ve velmi <br>speciálních případech dostáváme zajímavě nesprávné výsledky.<br><br>Vypadá to, že se snažíte mít různý přístup k jednomu místu v paměti s <br>využitím typu union. To je z hlediska specifikace C chybně, protože jak <br>se ukládají data v položce union je jen a pouze záležitost překladače a <br>jinde by to nemuselo fungovat správně (dobrá, to že jsem se s tím ještě <br>nesetkal, neznamená že se to prohlásí za standard. Aby to pak nedopadlo <br>jak s tím raketoplánem co vybouchl :-)<br><br>Pro mě je to příklad toho jak by se to psát nemělo. Jestli mi do toho <br>nic
 není, tak si toho nevšímejte :-D.<br><br>Hmm než jsem to dopsal, tak toto od pana Augustýna by mohlo fungovat.<br><br>(*pProgEEpr).EndProgram = 1;<br><br>Protože se nejprve provede dereference ukazatele na strukturu a pak se <br>přistupuje k položce.<br><br>Hezký den.<br><br><br>Dne 27.4.2013 12:18, Miroslav Draxal napsal(a):<br>&gt; Dobrý den<br>&gt;<br>&gt; Mějme<br>&gt;<br>&gt; char MenuPolozkaSet;<br>&gt;<br>&gt; typedef union {<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; char value;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; struct {<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned Bit0 : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned Bit1 : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned Bit2 : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned Bit3 : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp;  unsigned Bit4 : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned Bit5 : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned Bit6 : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned Bit7 : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; } Bits;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; struct {<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned val : 7;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned bit_ : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; } ProlnutiPauza;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; struct {<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned Mesic : 5;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned AutoOnOff : 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unsigned EndProgram :
 1;<br>&gt;<br>&gt;&nbsp; &nbsp; &nbsp; };<br>&gt;<br>&gt; } _ProgramEEprom;<br>&gt;<br>&gt; (*((_ProgramEEprom*) &amp; MenuPolozkaSet)).EndProgram = 1; // tohle je OK<br>&gt;<br>&gt; Pokud bych to chtěl rozepsat přes fyzický ukazatel<br>&gt;<br>&gt; _ProgramEEprom *pProgEEpr = (_ProgramEEprom*) &amp;MenuPolozkaSet;<br>&gt;<br>&gt; *pProgEEpr.EndProgram = 1;<br>&gt;<br>&gt; To hází chybu<br>&gt;<br>&gt; MenuKey.c:261: error: struct/union required<br>&gt;<br>&gt; MenuKey.c:261: error: illegal conversion between types<br>&gt;<br>&gt; Což asi chápu, ale jak to napsat. Snažím se tomu přijít na kloub. V těch<br>&gt; pointerech plavu.<br>&gt;<br>&gt;<br>&gt;<br>&gt; __________ Informace od ESET NOD32 Antivirus, verze databaze 8272<br>&gt; (20130426) __________<br>&gt;<br>&gt; Tuto zpravu proveril ESET NOD32 Antivirus.<br>&gt;<br>&gt; <a href="http://www.eset.cz/" target="_blank">http://www.eset.cz</a><br>&gt;<br>&gt;<br>&gt;
 _______________________________________________<br>&gt; HW-list mailing list&nbsp; -&nbsp; sponsored by www.HW.cz<br>&gt; <a ymailto="mailto:Hw-list@list.hw.cz" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>&gt; <a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>_______________________________________________<br>HW-list mailing list&nbsp; -&nbsp; sponsored by www.HW.cz<br><a ymailto="mailto:Hw-list@list.hw.cz" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br><a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br><br><br></div> </div> </div>  </div></body></html>