Re: Složené 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