Otlet kellene - C macro

Moczik Gabor progzmaster at freemail.hu
Fri Mar 12 22:18:06 CET 2004


Fuzesi Arnold wrote:
> Tudod mi a fura? Ez már régóta a fejemben van.
> Aki tud asm-ben/C-ben/Basic-ben/Pascal-ban/Java-ban/stb programozni, azok
> kozül egy-két kósza lélek kivételével
> senki nem szokta eröltetni a C/Java-n kivül a többit.

Most mar hozzaszolok:
En asm-ben/C-ben/Pascal-ban es Basic-ben is tudok programozni. Illetve 
basicben mar nem biztos, mert lassan ~8 eve (C64 korszakom) nem irtam egy 
basic sort sem. A java-t meg nem akarom megtanulni, mert nem erdekel. Nincs 
ra szuksegem. Mindenesetre nincs favorit programnyelvem. Ha valamit asm-ben 
kell megirni, az tobbnyire azert van, mert:
   - gyors vagy kicsi meretu, azaz jol kioptimalizalt kod kell
   - az algoritmus nem igazan illeszkedik a strukturalt programozas logikajahoz.
   - mindent kezben akarsz tartani. Ez csak bizonyos bonyolultsagu programig 
mukodik, utana epp ellenkezo az eredmeny.
   - nem lehet magas szinten, mert nagyon hardverkozeli. Pl. boot betoltot 
(vinyo bootsector-ba) eleg maceras lenne C-ben megirni.

A C es a Pascal szerintem majdnem egyenertekuek hasznalhatosag 
szempontjabol. Mar aki tudja hasznalni. C egy kicsit univerzalisabb, de 
mittomen egy gyors "ezt kiprobalom" temara a pascal egyszerubb. (string 
kezeles, grafika (PC-n), etc...)

Egyebkent a "bizzunk mindent a forditora, majd az optimalizal, ha nem, akkor 
szar a fordito" kijelenteseket rohadtul utalom. A fordito nem tudja mit 
akrasz, csak talalgat. Vagy eltalalja vagy nem. A multkori vita Andras 
Tantos-sal a PICC bit valtozoirol errol is szolt.

Pl. hogy egy byte valtozo mind a 8 bitjenek erteket adsz egymas utan, akkor 
miert nem optimalizalja egy byte ertekadasra? Mert nincs joga hozza. Pl. ha 
az egyik bit egy strobe jel a hardverben, a masik meg egy adat bit amit a 
strobe ir be, akkor fontos hogy a bitek milyen sorrendben kapnak erteket.

Vagy: LCD busy flag kiolvasasa a CARRY-be. Beirod C-ben hogy CARRY=RD7, es 
kapsz egy legkevesebb 4 utasitasos kodot. A fordito nem tudja maskepp 
megcsinalni. De ha te tudod, hogy a PORTD also 7 bitje nem erdekel, csak a 
7., akkor balra rotalod 1db utasitassal es a carry-ben van ami kell.


Egyebkent nem vagyok semmi rossznak elrontoja, de ha valaki printf-et akar 
irni, az tenyleg jobban illeszkedik az asm logikajahoz. Egyszeruen nem lehet 
C-ben a strukturalt programozas miatt attekinthetore _ES_ hatekonyra irni a 
kodot. Mondjuk alapbol nehez feladat, mert a float->str konverziot mar eleg 
durva asmben irni...

Mar irtam egy parszor sajat printf-et, es emiatt teljesen egyetertek 
Arnold-dal, hogy a legjobb ugy csinalni, hogy amit egyszer mar megirt valaki 
azt felhasznalni, es a sajattal kiegesziteni.

A bemasolom a meglevot a sajat kodba is jo megodlas lehet, csak eleg gany. 
Akkor lehet letjogosultsaga, ha k*rvara nem erdekel hogy nez ki, vagy ha 
sokat kell atalakitani, vagy jobban ki kell optimalizalni a library 
fuggvenyt (pl. nem kell ez-meg-az, mer' nincs rom hely).

Alapvetoen egyebkent nekem is ez a problema merult fel mint Arnoldnak, azaz 
valtozo parameterezesu makro kellett volna. Tobb prog forumon mondtak hogy 
nem standard, eddig csak a gcc tudja. Raadasul az en problemamat nem lehett 
workaround fuggvennyel megoldani csak makroval. Ha erdekel valakit, leirom 
miert, de lehet akar talalos kerdes is.

-- 
((( Móczik Gábor )))--((( hu <- DOT <- freemail <- AT <- progzmaster )))
((( Debian unstable )))-((( Kernel 2.4.20 )))-((( Celeron466 / 128Mb )))
((( -->  Vigyázat! Ön súlyos közlekedési balesetet szenvedett.   <-- )))
((( -->          Kívánja, hogy a légzsák felfúvódjon?            <-- )))



More information about the Elektro mailing list