C while for..for....for
Miroslav Mraz
mrazik na volny.cz
Čtvrtek Leden 26 22:46:29 CET 2023
11 vnoření si nějak nedovedu představit. Není lepší to rozsekat na
nějaké vhodně pojmenované kousky (funkce) ? V čistém C je to dost opruz,
protože musíte předávat proměnné, které jsou potřeba uvnitř a nemůžete
použít odkazy, v C++ je to jiné kafe, tam můžete použít třídu či
strukturu a mít potřebné proměnné viditelné v ní a ty odkazy také
zlepšují čitelnost.
Obecně poradit nejde, záleží na okolí těch smyček, v příkladu co uvádíte
by stačilo funkci za poslední uzavírací (složenou) závorkou ukončit a
místo goto použít prostě return.
Nicméně pokud goto použijete jen na jediném místě v souboru, nevidím v
tom problém. Pokud skáčete sem tam (hlavně dopředu), zamotáte se do
toho, proto MISRA vyžaduje striktně goto nepoužívat.
Víc jak 2 vnoření v jedné funkci je lépe už refaktorizovat, 11 je hodně
špatně (pokud nepočítáte v 11-ti rozměrném prostoru, ale tam se stejně
ničeho nedopočítáte).
Mrazík
On 26. 01. 23 21:41, Miroslav Draxal wrote:
> Tak asi to goto nechali v C protože jsou případy, kdy je to goto asi
> nejpřehlednější.
>
> Ptal jsem se, protože mám v jednom projektu 11 vnoření a to goto je
> prostě jednořádkové ukončení.
>
> Pokud bych používal tu „vlajku“, tak ten kód by se stal hodně hůř
> čitelný. Vlastně cokoli navrhují v tom
>
> https://stackoverflow.com/questions/9695902/how-to-break-out-of-nested-loops <https://stackoverflow.com/questions/9695902/how-to-break-out-of-nested-loops>
>
> Holt nechám MISRU ať se jí to nelíbí. Mě se to líbí.
>
> Pánové díky.
>
> Míra
Další informace o konferenci Hw-list