PIC a C

Josef Štengl ok1ced na nagano.cz
Úterý Květen 20 12:33:47 CEST 2014


Pokud píšete pro korporace / SIL, tak porovnání je v coding standardu. Je to proto, aby bylo vidět, co tím autor zamýšlel 
a aby výsledek podmínky byla logická hodnota (true, false). Já se nehádám, já jen shrnuji zdůvodnění které jsem našel, 
když jsem se zajímal o důvod.

příklad
if(byte&maska)
✘ výsledek není logická hodnota (dost tady skřípe idealistický a praktický přístup)

if((byte&maska)==1)
✘ to je nevyhovující kód, není zřejmé proč je tam ta jednotka.

if ((byte & NECO_MASKA) == NECO_AKCE_ZAP)
✔ tak nějak si to autoři těch pravidel představovali, jestli jsem je správně pochopil.


:-)
Pro odlehčení, soukromě rozlišuji tyto kategorie kódů (resp stylů procesů a programování)
1) jen napsat
2) akademický/studentský styl
3) industrial styl
4) bezpečný industrial styl
5) SIL/MILITARY kódy.
6) SPACE
7) idealisticky čisté.

1 a 7 jsou extrémy kterými se nemá cenu profesionálně zabývat, protože jsou prakticky nepoužitelné. Ale hraní povoleno :-).



Dne 20.5.2014 11:48, David Obdrzalek napsal(a):
> A proc to nepisete jako
> if(byte&1)
> {
> ... // tady bit je nahozeny
> }
> else
> {
> ... // tady bit je shozeny
> }
>
> tedy bez toho porovnani na 1 nebo 0. Podminka je vyhodnocena jako int, ktery je
> bud 0 (nesplneno) anebo cokoli jineho (splneno), tak je to porovnani zbytecne,
> kdyz uz beztak tim byte&1 dostanete 0 nebo 1 (tj. neco jineho).
> A jeste hrozi, ze casem zmenite aplikacni logiku a budete testovat vyssi bit, a
> pak uz if((byte&maska)==1) nebude splnene nikdy.
>
> Uprimne, vzdycky, kdyz vidim takovehle explicitni porovnani na nulu anebo
> porovnani nahozeneho bitu s 1, tak zkoumam, co tim autor chtel specialniho
> rict, proc je dulezite, ze to je zrovna 1 a ne neco jineho nenuloveho. V C to
> je asi jako byste v Pascalu psali if A=TRUE ... else if A=FALSE (anebo, to uz
> jsem taky kolikrat videl: if A=TRUE then B=TRUE else B=FALSE;)
>
> Chapu, ze se to muze mene zkusenym zdat jako snazsi k pochopeni, me to ale
> pripada zavadejici az osklive. Tady taky hrozi, ze tam napisete jen jedno
> rovnitko jako v Pascalu, a kdyz vlevo nebude vyraz ale promenna, tak se to tam
> priradi (u vyrazu aspon prekladac zarve, ale kdyz tam bude l-value tak to
> maximalne da warning, pokud vubec).
>
>
> Ted me tak napada dotaz pro vetsi znalce - proc vlastne ma porovnani vyssi
> prioritu nez bitove operace? (ze ma porovnani vyssi prioritu nez logicke citim
> prirozene dobre, ale u bitovych se mi ted na prvni kuk zda, ze by spis bitove
> mely mit vyssi prioritu, aby se lip skladaly vyrazy. Protoze kdyz vysledkem
> porovnani je nula/nenula, tak delat s tim pak dalsi bitove operace mi prijde
> ponekud zvrhle)
>
> D.O.
>
> On 19 May 2014 at 12:02, Zuffa Jan wrote:
>>
>> prekladac je V9.81
>> a kedze teraz uz vsetko funguje ako ma
>> nemusite ani hadat kde sa stala chyba :)
>> tie zatvorky som tam urcite skusal ale momentalne tam nie
>> su :( dakujem vsetkym za nakopnutie
>>
>>
>> j.
>>
>> -----Original Message-----
>> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jaromir
>> Sukuba
>> Sent: Monday, May 19, 2014 11:50 AM
>> To: HW-news
>> Subject: Re: PIC a C
>>
>> Pocuj, "hitec", aku verziu tohto historickeho kompilatora mas? ;-)
>>
>> Mne to vo verzii 9.83 a aj v XC8 (skus ho, v mojom testovacom priklade
>> generuje XC8 v 1.3 asi polovicny kod) mi to v tom druhom pripade vzdy vychadza
>> ako false, nie true - co aj napoveda logika a analyza kolegu Stengla.
>> Samozrejme, blbost je ze tam nemas zatvorky, ako ostatni nacrtli. So
>> zatvorkami to ide ako ma, overene v HiTech 9.83 a XC8 v 1.3
>>
>> Dňa 19. mája 2014 11:09, Zuffa Jan <ZuffaJ na cgc.sk> napísal/a:
>>> Ahojte,
>>>
>>> cez vikend som pri programovani PIC (HiTec)
>>>
>>> narazil na nasledovny problem:
>>>
>>> ak napisem podmienku if(byte & 1 == 1)
>>>
>>> pracuje vzdy zpravne podla toho aku hodnotu ma bit 0
>>>
>>> ak vsak napisem if(byte & 1 == 0) bez ohladu na bit 0 sa podmienka
>>>
>>> vzdy vyhodnoti ako true. Nieco som nepochopil alebo to takto skutocne
>>> funguje?
>>>
>>>
>>>
>>> j.
>>>
>>>
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


Další informace o konferenci Hw-list