[elektro] (C) programozási kérdés

Andras Huszti kyrk at villamvadasz.hu
Sun Nov 20 12:19:24 CET 2011


Hello!

> Magasabb szinteken előszeretettel módi, hogy ha nem tudunk valamilyen
> paramétert akkor 0-val hívjuk a függvényt.
> Pl. egy bool ReadReplyFromBuf(ptr pDestBuf, pdword pBufSize) függvényt
> lehet így is használni:
>   if(ReadReplyFromBuf(0, &requestedSize) &&
>      (requestedSize < cMainBufSize)) {
>          ReadReplyFromBuf(&MainBuf[0], &requestedSize);
>          ...
>   }
> ugye itt NIL a mutató, és egyből hibára szaladnál ha nem ellenőriznéd,
> viszont kíválóan használható így arra, hogy lekérdezd van-e elég adat,
> érdemes-e foglalkozni vele, stb.
Sajnos ez rossz programozoi gyakorlat. Legjobb pelda erre a realloc. Ez
a fugveny egyben, malloc, free es atmeretezo. A parameterektol fuggoen.
Ha bizonyos parametere nulla akkor maskepp mukodik. Pl ha csak meretet
kap akkor malloc, ha csak pointert akkor free. De mi itt a problema? Az
hogy ha veletlenul az ember rossz adatokkal hivja meg akkor mas lesz a
mukodese es nem derul ki. Pl tomb veletlenul el van cimezve es
felulirodik egy masik adat. Ez kerul bele a realloc fuggvenybe es kesz a
baj, nem atmeretezi a memoriat hanem felszabaditja. A programozo meg
hetekig keresi a hibat. Feleslegesen hoz letre a programozo olyan
hibalehetoseget ami mas interfacedesignnal elkerulheto lenne.
Nem szabad hogy egy valtozo tobb metainformaciot is hordozzon, mert
nagyon veszelyes. Pl rossz pelda a getChar is ami -1el ter vissza. Itt
is a karakterinformacio mellet visszadja azt hogy van-e karaketer. De
sajnos bevett gyakorlat.



More information about the Elektro mailing list