Navic ten kod budes mit hur srozumitelny a netestovatelny.
Naopak. Pokud máš hierarchii nějakých částí kódu (file systém -> buffer -> parser -> ...) a přeteče ti buffer při testu parseru, parser přitom bere jenom konkrétní velikost bufferu, tak problém s bufferem nevidíš. Pokud ti vyskočí výjimka "Buffer overflow: 4096B available, 4100B used", tak víš, že je někde něco zhnilýho, co bys bez výjimky neviděl.
Vy to teda dobre prozivate. Toto, jak ty rikas, pochybne pravidlo, je nekde na urovni zasad typu: "s nuzkami se nebeha" nebo "nikdy neolizuj nuz". Jsou tu pro to, aby si clovek zbytecne neublizil. Pokud to pravidlo cas od casu porusis, nemusi se nic stat, kdyz ale nastane problem, muze to byt sakra neprijemne. A puvodni prispevek byl toho dukazem.
Děcku jsem nikdy neříkal "s nůžkami se neběhá", ale "pozor, nůžky jsou ostrý a pokud s nima budeš běhat, tak se na ně napíchneš". Ty tady papouškuješ nějaký pravidlo bez uvedení, proč to tak je.
Dobehnuti funkce do konce jako takove nezajisti nic, ale na smeruje programatora k tomu, aby se korektne vyporadal se vsemi pouzitymi prostredky. Stejne jako nebahni s nuzkami to nezajisti, ze si clovek neublizi, ale je velka sance, ze se to riziko znatelne snizi, zejmena u zacatecniku.
To je specifický případ, který můžeš řešit jinak. Třeba pravidlem "wrapperu se zdroji" - máš "čistou" funkci, ze které můžeš kdykoliv vypadnout. Zdroje se alokují/dealokují ve volající funkci (např. GCC inlinuje statickou funkci v rámci modulu, takže je to čitelnější a bez overheadu) a zdroj se uvolní, jak vypadneš z funkce. Pak tvá argumentace neuvolněním zdrojů ztratí smysl.
Máš tam ještě něco?
Podminky a cykly jsou ale jasne definovane a citelne konstrukce. Kdyz do nich pridas break, continue nebo return, doplnis do nich jen jinak pojmenovane "goto", ktere uz pred padesati lety bylo "considered harmful".
Ne. Schválně si zkus hodit
break nebo
continue do bloku
if a uvidíš, co se stane.
Pak si zkus hodit
continue někam do bloku
switch.
Break/continue jsou legitimní konstrukce pro řízení toku cyklu. Proto tam projdou a jinde ne. Nemůžu za to, že jsi je ještě nepochopil.
Nechci vidět, jestli chápeš obyčejný cyklus
for v C.
To nekdo dnes skutecne pouziva pri tvorbe programu? Uz v devadesatych letech to byla pomucka stezi pouzitelna ve vyuce.
To je možná ta chyba. Člověk některý věci líp pochopí, když mu je názorně někdo ukáže. Rozhodně je to lepší, než když mu někdo napíše na papírek desatero a neřekne, co přesně znamená "nesesmilníš", protože o tom se přece nemluví.
Protoze primarni u kodu neni prelozeny strojak, ale jeho srozumitelnost a robustnost. Obavam se, ze mistni frajeri nejsou s to pobrat, ze tvorba programu saha dal nez je buseni kodu v editoru a dodrzovani specifikace jazyka.
V tom případě, co je nepřehlednýho na tomhle?
for(;;) {
char c = putch();
if(c > 127) continue; // Podporujeme jenom ASCII, ostatni znaky mame ignorovat
...
}