ukazkove zdrojaky

Martin `MJ' Mares mj na ucw.cz
Pátek Březen 3 23:05:05 CET 2006


Kalispera!

> Nic proti kernelu, ale neutopil
> 
> {
> 	if (!out && !mydev_priv = kmalloc(...))
> 		out = out1;
> 	...	
> 	if (!out && !register_interrupt(...))
> 		out = out2;
> 	...	
> 	if (!out && !register_chrdev(...))
> 		out = out3;
> 	...
> 	return SUCCESS;
> 
> 	switch(out){
> 		case out3: unregister_interrupt(...); /* no break! */
> 		case out2: kfree(...);
> 		case out1: return -ENODEV;
> 	}
> }	

To by jiste fungovalo, ale zkus se zamyslet, co je Tve vlastni predstave
o tom, jak ma ta funkce pracovat, blizsi. Te me je blizsi urcite "udelej
tohle a pokud se to nepovede, tak vyskoc a uklid" nez "nejdriv zkontroluj,
jestli se zatim vsechno podarilo, pokud ano, tak udelej tohle a poznamenej
si, jestli se to podarilo". A podle toho by take mel kod vypadat -- myslim-li
na goto, necht pisi goto, cokoliv jineho je pokrytectvi :-)

Samozrejme je pravda, ze skoku se da vzdy zbavit, ale stejne tak plati,
ze kazdy program se da upravit tak, aby obsahoval jenom jeden cyklus :-)

(Ponechme radeji stranou, ze psat pred kazdou podminku `!out' je pekna
otrava a nejspis take zpomaleni, zvlast pokud by to byly podminky cyklu,
a ze ty outy by take nekde musely byt deklarovane, coz by programu
na citelnosti nepridalo.)

Kolem programovani se vubec vyrojila spousta nezdravych pover, at uz ta
Dijkstrova o skodlivosti goto, pres cetne poucky o komentovani programu
(velmi spravne zhodnocene Yenyou), az treba po modu XML na vsech sloupich.
Nekdy mam dojem, ze vzdelany programator nakazeny vsemi temito zasadami
dokaze napachat vice skody nez diletant :-)

	Dobrou noc vespolek a selskemu rozumu dlouhovekost vinsuji

-- 
Martin `MJ' Mares   <mj na ucw.cz>   http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
Mr. Worf, scan that ship."  "Aye, Captain... 600 DPI?


Další informace o konferenci Linux