Re: Sloené podmínky
Jan Waclawek
konfera na efton.sk
Čtvrtek Duben 11 10:42:07 CEST 2024
Ja to pisem zasadne takto:
#define ANL &&
if (1
ANL podmienka1
ANL podmienka2
ANL podmienka3
) {
podmieneny kod;
}
tymto sposobom sa totiz da slusne urobit aj odsadzovanie (a podla potreby
riadkove vykomentovanie) vnorenych vyrazov.
Ale nepouzivam vyhradne zlozene vyrazy, pouzivam aj tu kaskadu if-ov.
Rozhodovanie, ktore z toho pouzijem, je viacmenej o tom, ci tie jednotlive
podmienky maju podobny charakter (napr. vsetko su to nejake stavove bity),
alebo nie (napr. ak niektora podmienka hovori o variante vyrobku, tak ta
obvykle je ako prva a nie je sucastou zlozeneho vyrazu).
Nikdy nekompilujem bez optimalizacie, a tento druh vyrazov sa optimalizuje
ako prvy, lebo je to lahke a jednoznacne. Citaj: na vysledny binar ten
zapis nema vplyv.
wek
----- Original Message ---------------
Subject: Re: Složené podmínky
From: Pavel Hudeček <edizon na seznam.cz>
Date: Thu, 11 Apr 2024 10:25:57 +0200
To: hw-list na list.hw.cz
>Pokud jde jen o komentování, tak se dá i jeden if rozdělit na víc řádků
>a odpadne hromada bloků:
>
>if (podmínka1 // koment 1
> && podmínka2 // koment 2
> && podmínka3 { // koment 3
> podmíněný kód
>}
>
>Tohle teda spíš používám když jsou podmínky moc dlouhé. Třeba u nových
>AVR nic neobvyklého, tam má snad i většina knihovních definů od bitů 10+
>znaků.
>
>V C je možné cokoli, jen dát pozor, jestli je to přehledné pro ty co to
>pak někdy budou číst. Případně jestli je to v souladu s podmínkami
>zadavatele, třeba jestli požaduje MISRA, nebo má nějaké speciální
>preference. Já třeba nerad používám nadbytečné závorky ve výrazech typu
>if (a && b || c), ale když zadavatel chce, mu je tam klidně dám: if ((a
>&& b) || c)
>
>PH
>
>Dne 11.04.2024 v 9:39 Jaroslav Buchta napsal(a):
>> Ale nemelo by se aspon zapomenout na to, ze pravidla psani bezpecneho
>> kodu doporucuji (nebo narizuji? ) pouzivat bloky i pro jeden prikaz.
>> takze spis
>>
>> if (podminka1)
>>
>> { // komentář1
>>
>> if (podminka2)
>>
>> { // komentář2
>>
>> if (podminka3)
>>
>> { // komentář3
>>
>> }
>> }
>> }
>>
>> a to uz je trosku roztahane...
>>
>> Dne 11.04.2024 v 7:28 Martin Záruba napsal(a):
>>>
>>> Mě ten druhý zápis připadá přehlednější, protože lze udělat zápis:
>>>
>>> if (podminka1) // komentář1
>>>
>>> if (podminka2) // komentář2
>>>
>>> if (podminka3) // komentář3
>>>
>>> {};
>>>
>>>
>>> a navíc při ladění pokud chci na zkoušku podmínku vyhodit, stačí na
>>> začátek napsat //
>>>
>>> Martin Záruba
>>> Dne 10.4.2024 v 21:46 Jaroslav Buchta napsal(a):
>>>> I v prvním případě je přesně definováno pořadí a pravidla vyhodnocení.
>>>> Druhý zápis jsem snad nikdy nikde neviděl, že by někoho napadlo použít.
>>>>
>>>> Dne 10.04.2024 v 21:44 Pavel Hudeček napsal(a):
>>>>> V prvním případě necháte na překladači, jaké pořadí vyhodnocení
>>>>> zvolí, ve druhém zajistíte pořadí, takže např. při nesplnění
>>>>> podmínky 1 nevadí, že na podmínce 2 by to zrovna teď zhavarovalo.
>>>>>
>>>>> PH
>>>>>
>>>>> Dne 10.04.2024 v 18:17 Martin Záruba napsal(a):
>>>>>> Jestliže potřebujete vyhodnotit, že je splněno více podmínek
>>>>>> současně, používáte zápis
>>>>>>
>>>>>> if (podminka1 && podminka2 && podminka3 .....) {};
>>>>>>
>>>>>> nebo
>>>>>>
>>>>>> if (podminka1) if (podminka2) if (podminka2) ..... {};
>>>>>>
>>>>>> Je v přeloženém kódu nějaký rozdíl nebo je to jedno?
Další informace o konferenci Hw-list