<html><head><title>Re: Chyba v C - velmi podivné chování</title>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body>
<span style=" font-family:'Courier New'; font-size: 10pt;">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>
<span style=" color: #800000;"><b>> 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 [mailto:hw-list-bounces@list.hw.cz] 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 <</b></span></span><a style=" font-family:'courier new'; font-size: 10pt;" href="mailto:tomas.hamouz@divesoft.com">mailto:tomas.hamouz@divesoft.com</a><span style=" font-family:'courier new'; font-size: 10pt; color: #800000;"><b>><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: *as5sgm@gmail.com <</b></span><a style=" font-family:'courier new'; font-size: 10pt;" href="mailto:as5sgm@gmail.com">mailto:as5sgm@gmail.com</a><span style=" font-family:'courier new'; font-size: 10pt; color: #800000;"><b>><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 <</b></span><a style=" font-family:'courier new'; font-size: 10pt;" href="mailto:a2x1nptda8@email.cz">mailto:a2x1nptda8@email.cz</a><span style=" font-family:'courier new'; font-size: 10pt; color: #800000;"><b>><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>
>> >> </b></span><a style=" font-family:'courier new'; font-size: 10pt;" href="https://list.hw.cz/pipermail/hw-list/2011-July/399004.html">https://list.hw.cz/pipermail/hw-list/2011-July/399004.html</a><br>
<span style=" font-family:'courier new'; font-size: 10pt; color: #800000;"><b>>> >><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 </b></span><a style=" font-family:'courier new'; font-size: 10pt;" href="http://www.HW.cz">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;" href="mailto:Hw-list@list.hw.cz">> Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">> http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<span style=" font-family:'courier new'; font-size: 10pt; color: #800000;"><b>> _______________________________________________<br>
> HW-list mailing list  -  sponsored by </b></span><a style=" font-family:'courier new'; font-size: 10pt;" href="http://www.HW.cz">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;" href="mailto:Hw-list@list.hw.cz">> Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">> http://list.hw.cz/mailman/listinfo/hw-list</a></body></html>