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