Prosba o pomoc - nechapu zapis v C

Tomáš Hamouz konfery.tomas.hamouz na seznam.cz
Pondělí Listopad 21 11:13:42 CET 2022


I MISRA může mít výjimky, když si je implementátor odůvodní.
Já třeba pro otestování jednotlivých bitů taky zkracuju.

Tedy

#define  FLAG_PRIKLAD    0x01

  if (flags & FLAG_PRIKLAD) {
     // kod pro priklad
  }


podle MISRA by mělo být

  if ((flags & FLAG_PRIKLAD) != 0) {

ale to mi přijde výrazně nepřehlednější.

Tomáš


> S těma závorkama je to těžký...
> Když je výraz krátkej, je dostatečně přehlednej s i bez, teda aspoň 
> pokud se v něm nevyskytují méně obvyklé operátory.
> Když je dlouhej, je nepřehlednej s i bez, takže je nakonec lepší doplnit
> přiměřený počet závorek, aby se zkrátily bezzávorkové části na dobře 
> přehlednou úroveň a přitom počet závorek nedošel k nepřehledné 
> přezávorkovanosti.
> Blbý je, když je vyžadováno 100% dodržení MISRA.

> PH

> Dne 21.11.2022 v 10:39 Tomáš Hamouz napsal(a):
>>> To zkrácení Decoff != 0 na Decoff funguje tak, že při vyhodnocování logické podmínky
>>> se element "spočte" a pokud je výsledek cokoli různého od nuly, je to splněno
>>> ("ano", "true", "platí"). Pokud je nula, neplatí. Takže explicitní test na nulovost
>>> se nemusí psát, stačí se podívat na tu hodnotu jako takovou. Takže v C/C++ se to
>>> prostě píše rovnou krátce. Je to asi jako kdybyste v Pascalu psali if A=true then
>>> ... místo if A then ... Přeloží se to oboje stejně, ale je to delší na zápis a
>>> trochu méně přehledné a může to mást.
>> To je samozřejmě pravda, ale už i C komunita občas pochopila, že to je
>> sémanticky špatně. Viz třeba MISRA
>>   - rule 12.1 - závorkování výrazů, nespoléhat na precedenci operátorů
>>   - rule 14.4 - výraz pro if má být typu boolean
> _______________________________________________
> 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