Prosba o pomoc - nechapu zapis v C

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Pondělí Listopad 21 11:31:05 CET 2022


Kdyz uz me prastily do oka zavorky bloku jak je nesnasim, jaky je obecne 
pomer pouzivani tohoto stylu a zapisu ktery preferuji?

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

U to ho druheho zapisu nikdy nemuzu na prvni pohled najit, jak zavorky k sobe patri i kdyz je to na vysku kompaktnejsi.



Dne 21.11.2022 v 11:13 Tomáš Hamouz napsal(a):
> 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
> _______________________________________________
> 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