[elektro] (C) programozási kérdés
Info
info at kiralyelektronika.hu
Sun Nov 20 12:44:54 CET 2011
> 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.
Nos ez igaz, de sok lúd disznót győz :) Asmes szemmel meg nem fogsz
meggyőzni, hogy ne adjak vissza metainfót, mikor egy karakter 8 bit a
függvény meg minimum 32 bitet ad vissza (nem 8bites uC-t feltételezve)
Megoldás az, ha minden függvény csak azt csinálja amit kell neki,
úgymond nem végez nyomozó munkát. Ettől eltekintve fontos a
hibaellenőrzés már a paramétereknél is ! Szóval ígyis úgyis kell bele
fölösleges kódrész, de legalább hiba esetén hasznos lesz.
Ami a getmem-es példádat illeti érdekes hiba, abszolút nem worst-case
tesztelt megoldás. Ettől függetlenül ha megfigyelted a példámban az
információszerzést hoztam fel nem a végrehajtást. Jó, hogy felhívtad
rá a figyelmünket, akkor hozzáteszem, hogy javasolt kinullázott
paraméterű hívásnál csak információ visszaadása, és semmilyen
végrehajtás. Így ez kikerülhető. (bár ha a kód túlszalad és felülírja
a mutatód az már eleve rossz namind1)
Bevallom nem találkoztam még ilyen dologgal, sosem használok allocot,
mindíg mindent fixre teszek ami globális, így nem fragmentálódok...
A visszaadásnál, hogy kikerüljük ezt a hibát csak a nyelv lehetőségeit
használhatjuk. A cmsis/ioclt megoldás, amikoris közöljük mit
szeretnénk csinálni. Ez már több kódot eredményez.
Kövi módszer a struktúrák használata. Visszatérési paraméterként simán
elfér 64bit is (bár nem minden fordító eszi meg). Pl.:
register x = readchar();
if (x.errors != NO_ERROR) {
...
} else Debug("error");
Mondjuk perverzek csinálhatnak olyat is, hogy taszkban fut egy while
readchar(), amit hiba esetén kilő és csak akkor fut amikor van
karakter :) müxik :))
More information about the Elektro
mailing list