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