[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