<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<title>Re: Chyba v C - velmi podivné chování</title>
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Army neprogramujem,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">len tie malinke PICka. ARM asi nie je dobry priklad.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Take male picko ma 2kB FLASH a 128B RAM<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">j.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Hw-list [mailto:hw-list-bounces@list.hw.cz]
<b>On Behalf Of </b>Tomáš Hamouz<br>
<b>Sent:</b> 22. apríla 2020 8:17<br>
<b>To:</b> HW-news<br>
<b>Subject:</b> Re: Chyba v C - velmi podivné chování<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New","serif"">To je standardně zažitý omyl, který se traduje z dob kdy překladače příliš neoptimalizovaly.<br>
Současné překladače dělají hodně dobrou práci.<br>
<br>
Pokud mohu mluvit z vlastní zkušenosti a pokud je možno ARM považovat za mikročip, tak mě naopak překvapuje <br>
kde všude překladač (GCC) inlinuje, a to i v případě že mám optimalizaci nastavenou na Debug.<br>
<br>
Nehledě na to že lze použít  __attribute__((always_inline)).<br>
<br>
Tomáš <br>
<br>
<br>
<b><span style="color:maroon">> Ako obcasny programator si dovolim povedat ze rozbijanie do funkcii je super vec a<br>
> a sprehladnuje kod, ale vo svete mikrocipov mi to moc nesedi. Tam to intuitivne laka<br>
> k efektivnejsiemu kodu aj co sa tyka zbytocnych volani. Predsa je to rezia navyse<br>
<br>
> j.<br>
<br>
> -----Original Message-----<br>
> From: Hw-list [<a href="mailto:hw-list-bounces@list.hw.cz">mailto:hw-list-bounces@list.hw.cz</a>] On Behalf Of Jan Waclawek<br>
> Sent: 21. apríla 2020 22:07<br>
> To: HW-news<br>
> Subject: Re: Chyba v C - velmi podivné chování<br>
<br>
> Ja som po urcitom case prisiel na to, ze privela pismeniek je<br>
> rovnako zle ako primalo. Samozrejme je tazke utrafit nejaky zlaty<br>
> stred; a co je este tazsie, je utrafit tie spravne pismenka a ich<br>
> spravnu polohu tak, aby to pomohlo mojmu buducemu ja prip. niekomu inemu.<br>
<br>
> A tie "coding standards" typu hlavicka funkcie a rozbijanie do<br>
> funkcii su podla mna vo vacsine pripadov kontraproduktivne (to je<br>
> samozrejme slovo do bitky, rovnako zbytocnej ako su napr. diskusie o<br>
> zatvorkovaco-zalamovacich styloch (zbytocnej, pretoze sa ma pouzivat len a len One True, samzorejme)).<br>
<br>
> V tomto konkretnom pripade by som ja asi pouzil tu pomocnu<br>
> premennu; ale co je podla mna ovela dolezitejsie je, ze ak by som aj<br>
> zachoval ten vyraz tak ako je, rozbil by som ho do jednotlivych<br>
> riadkov a kazdy riadok by som okomentoval; vratane toho finalneho porovnania s cislom 3.<br>
<br>
> wek<br>
<br>
<br>
<br>
> ----- Original Message ---------------<br>
<br>
> preco chcete setrit pismenkami?<br>
<br>
> podla mna je dolezitejsie aby to bolo lahko citatelne komukolvek.<br>
<br>
> lebo ak chcete mat portovatelny kod tak musi byt trocha odolny,<br>
> taktiez pri testovani ked potrebujete vediet ktory vyraz ma aku hodnotu, alebo pre logovanie.<br>
<br>
> je kopec rieseni ktore na prvy pohlad zjednodusuju program ale<br>
> nakoniec sa mozu skaredo vypomstit<br>
<br>
<br>
>>>>A bylo by docela zajímavé se podívat jak  se liší zkompilovaný kód v obou pøípadech.<br>
<br>
>>>>Myslím že by tam velké rozdíly nebyly.<br>
<br>
> to by aj mna by zaujimalo :)<br>
<br>
<br>
> On 21. 4. 2020 12:39, Pavel Hudecek wrote:<br>
<br>
>> No jo, ale to pak na místì použití není vidìt, jaké že ty podmínky <br>
>> jsou. Pøedpokládám, že funkce bude dle firemních pravidel definována <br>
>> v nìjakém externím souboru. Nedej bože, když takových sad podmínek <br>
>> bude víc. To pak budou názvy tìch funkcí tak dlouhé, že urèitì poruší <br>
>> nìjaké délkové pravidlo, ohlednì délky øádku:-)<br>
<br>
>> Normálnì bych pro zvýšení pøehlednosti dal mezery okolo + (což jsem <br>
>> ale pro zabránìní zalomení v mailu vynechal). Uvažoval bych ještì o <br>
>> další závorce okolo souètu.<br>
<br>
>> Použití funkce pro mì pøehlednost jasnì snižuje:-) Navíc MIN_A_COUNT a <br>
>> REMAING_COUNT jsou vyloženì matoucí názvy pro podmínky nesouvisející s <br>
>> count:-) Jinak teda proti použití define nic nenamítám, bìžnì <br>
>> používám, ale zas je to zbyteèná komplikace do ukázky typu kódu v mailu.<br>
<br>
>> K èemu teda máme rùzné jazyky, když bychom nemohli využívat jejich výhod?<br>
<br>
>> PH<br>
<br>
>> *Od: *Tomáš Hamouz <</span></b></span><a href="mailto:tomas.hamouz@divesoft.com"><span style="font-size:10.0pt;font-family:"Courier New","serif"">mailto:tomas.hamouz@divesoft.com</span></a><b><span style="font-size:10.0pt;font-family:"Courier New","serif";color:maroon">><br>
<br>
>> Myslím že lepší otázka zní, jak to napsat tak aby bylo na první pohled <br>
>> jasné co daný výraz vyhodnocuje,<br>
>> bez ohledu na poèet písmenek.<br>
<br>
>> Abych planì nekritizoval, nejspíš bych to udìlal takhle, ale protože <br>
>> nevím úèel celé konstrukce,<br>
>> tak by bylo tøeba lepší zahrnout i porovnání s trijkou. Podmínku <br>
>> malého poètu písmenek zcela zjevnì<br>
>> nesplòuju, ale to zcela zámìrnì, protže bych se v tom rád vyznal i po <br>
>> nìkolika letech kdy jsem to nevidìl.<br>
<br>
<br>
>> #define   MIN_A_COUNT               2            // vyznam teto konstanty<br>
>> #define   REMAING_COUNT       12        // vyznam teto konstanty<br>
>> #define   MINIMAL_COND_COUNT   3        // vyznam teto konstanty<br>
<br>
>> static inline int count_test_conditions(int a, int b, int x, int y)<br>
>> {<br>
>>     int count = 0;<br>
>>     if (a < MIN_A_COUNT) {++count;}        // oduvodneni teto podminky<br>
>>     if (a > b) {++count;}                  // oduvodneni teto podminky<br>
>>     if (x < y) {++count;}                  // oduvodneni teto podminky<br>
>>     if ((a%x) == REMAING_COUNT) {++count;} // oduvodneni teto podminky<br>
>>     if (b < y) {++count;}                  // oduvodneni teto podminky<br>
>>     return count;<br>
>> }<br>
<br>
>> if (count_test_conditions(a, b, x, y) > 3) {<br>
>> }<br>
<br>
<br>
>> A bylo by docela zajímavé se podívat jak se liší zkompilovaný kód v <br>
>> obou pøípadech.<br>
>> Myslím že by tam velké rozdíly nebyly.<br>
<br>
<br>
<br>
>>       <br>
<br>
>> Otázka tedy zní, jak ho upravit, aby prošel a pøibylo co nejménì <br>
>> písmenek:-)<br>
<br>
>> PH<br>
<br>
>> *Od: <a href="mailto:*as5sgm@gmail.com">*as5sgm@gmail.com</a> <</span></b><a href="mailto:as5sgm@gmail.com"><span style="font-size:10.0pt;font-family:"Courier New","serif"">mailto:as5sgm@gmail.com</span></a><b><span style="font-size:10.0pt;font-family:"Courier New","serif";color:maroon">><br>
>> >>> If ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y) > 3) {<br>
>> Tento riadok kodu by nepresiel review a ani MISRA rules, vsade kde su <br>
>> aspon dvaja vyvojari :)<br>
>> Miro<br>
<br>
>> On 21. 4. 2020 10:37, Pavel Hudecek wrote:<br>
>> Vzhledem ke komutativnosti sèítání by poøadí mìlo bejt irelevantní, <br>
>> kromì toho posledního >, ale to má nižší prioritu než +, takže se musí <br>
>> vyhodnotit jako poslední.<br>
<br>
>> No a že to nebude fungovat v jiných jazycích? To je snad normální. <br>
>> Nebo všechny mají ++, printf, pointery jako Delphi, nepotøebují <br>
>> deklarovat promìnné jako VB6, … ?<br>
<br>
>> Pøíkazù je tam 0, takže omezení na max. jeden na øádek to taky <br>
>> nepøekraèuje.<br>
<br>
>> PH<br>
<br>
>> *Od: *Michal Gregor <</span></b><a href="mailto:a2x1nptda8@email.cz"><span style="font-size:10.0pt;font-family:"Courier New","serif"">mailto:a2x1nptda8@email.cz</span></a><b><span style="font-size:10.0pt;font-family:"Courier New","serif";color:maroon">><br>
>> Spravne se maji slozite podminky prevest do funkci. Plati zasada jeden<br>
>> radek jeden prikaz. A nespolehat se na interni "tajne" funkce<br>
>> compilatoru. Co kdyz to nekdo skopiruje do C++? Nebo do uplne jineho <br>
>> jazyja.<br>
<br>
<br>
>> Dne 21.04.2020 v 8:46 Jan Waclawek napsal(a):<br>
>> > A nemohlo to byt skor o tom, ze v takychto vyrazoch<br>
>> ><br>
>> >>> If ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y) > 3) {<br>
>> ><br>
>> > nie je zarucene poradie vyhodnotenia pod-vyrazov, aj keby mali vedlajsie<br>
>> > efekty?<br>
>> ><br>
>> > wek<br>
>> ><br>
>> ><br>
>> > ----- Original Message ---------------<br>
>> >> Sa vam dvom do toho zamontujem, som nieco nasiel vo svojom archive, ale<br>
>> >> Ty si mimo podozreni :)<br>
>> >> Skor si ja pofajcim, ze uz kedy som daval do placu citat z normy, ktory<br>
>> >> si teraz dal aj Ty :-D<br>
>> >><br>
>> >> </span></b><a href="https://list.hw.cz/pipermail/hw-list/2011-July/399004.html"><span style="font-size:10.0pt;font-family:"Courier New","serif"">https://list.hw.cz/pipermail/hw-list/2011-July/399004.html</span></a><br>
<b><span style="font-size:10.0pt;font-family:"Courier New","serif";color:maroon">>> >><br>
>> >> miro<br>
>> >><br>
>> >> On 21.4.2020 1:17, Jan Waclawek wrote:<br>
>> >>> Hm, tak ja vidim vyhody skor v tych 6 ifoch a 1 pomocnej premennej...<br>
>> >>><br>
>> >>> Ale ak by si nahodou nasiel odkaz, kde ten JW z minulosti povedal, ze<br>
>> >>> vysledkom podmienky nemusi byt 0 alebo 1, tak by som Ti bol vdacny.<br>
>> >>><br>
>> >>> wek<br>
>> >>><br>
>> >>><br>
>> >>> ----- Original Message ---------------<br>
>> >>> Tak?e se po pár misících mu?u vrátit k tomu, ?e jedna z výhod C je <br>
>> mo?nost<br>
>> >>> dilat vici, jako:<br>
>> >>><br>
>> >>> If ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y)>  3) {<br>
>> >>><br>
>> >>> Co? v jiných jazycích vede na 6 ifu a 1 pomocnou prominnou.<br>
>> >>><br>
>> >>> PH<br>
>> >>><br>
>> >>> Od: Jan Waclawek<br>
>> >>><br>
>> >>> Hm, tak potom by som mal asi tomu JW z minulosti jednu tresnut...<br>
>> >>><br>
>> >>> Konkretne teda, C99, 6.5.8 Relational operators #6:<br>
>> >>> Each of the operators<  (less than),>  (greater than),<= (less than or<br>
>> >>> equal to), and>=<br>
>> >>> (greater than or equal to) shall yield 1 if the specified relation <br>
>> is true<br>
>> >>> and 0 if it is false. 92)<br>
>> >>> The result has type int.<br>
>> >>><br>
>> >>> Ten footnote 92) je kuzelny:<br>
>> >>>    The expression a<b<c is not interpreted as in ordinary <br>
>> mathematics. As the<br>
>> >>> syntax indicates, it<br>
>> >>> means (a<b)<c; in other words, ??if a is less than b, compare 1 to c;<br>
>> >>> otherwise, compare 0 to c??.<br>
>> >>><br>
>> >>> wek<br>
>> >>><br>
>> >>><br>
>> >>> ----- Original Message ---------------<br>
>> >>><br>
>> >>> Mil jsem nijak za to, ?e to byl právi jistý JW, kdo mi tu onehdá <br>
>> vyeetl, ?e<br>
>> >>> spoléhat se, ?e výsledkem podmínky je 0 nebo 1 není správné:-)<br>
>> >>><br>
>> >>> PH<br>
>> >>><br>
>> >>> Od: Jan Waclawek<br>
>> >>><br>
>> >>>> A jinak teda ten kód udilá to, ?e pokud je splnina podmínka v <br>
>> závorce, nastaví se bit 0 na výstupní (zda to bude bit 0 není <br>
>> zarueeno, ale jinak skoro jisté).<br>
>> >>><br>
>> >>> Preco by to nemal byt bit 0?<br>
>> >>><br>
>> >>> _______________________________________________<br>
>> >>><br>
>> >>>>><br>
>> >>>>>     DDRB |=(1<CLK_UP);<br>
<br>
> _______________________________________________<br>
> HW-list mailing list  -  sponsored by </span></b><a href="http://www.HW.cz"><span style="font-size:10.0pt;font-family:"Courier New","serif"">www.HW.cz</span></a><br>
<a href="mailto:Hw-list@list.hw.cz"><span style="font-size:10.0pt;font-family:"Courier New","serif"">> Hw-list@list.hw.cz</span></a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list"><span style="font-size:10.0pt;font-family:"Courier New","serif"">> http://list.hw.cz/mailman/listinfo/hw-list</span></a><br>
<b><span style="font-size:10.0pt;font-family:"Courier New","serif";color:maroon">> _______________________________________________<br>
> HW-list mailing list  -  sponsored by </span></b><a href="http://www.HW.cz"><span style="font-size:10.0pt;font-family:"Courier New","serif"">www.HW.cz</span></a><br>
<a href="mailto:Hw-list@list.hw.cz"><span style="font-size:10.0pt;font-family:"Courier New","serif"">> Hw-list@list.hw.cz</span></a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list"><span style="font-size:10.0pt;font-family:"Courier New","serif"">> http://list.hw.cz/mailman/listinfo/hw-list</span></a><o:p></o:p></p>
</div>
</body>
</html>