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