C absolut cimu valtozo generalasa
Moczik Gabor
progzmaster at freemail.hu
Thu Jan 8 22:25:01 CET 2004
Andras Tantos wrote:
>>Altalaban nem szoktam nem-std megoldasokat feleslegesen beepiteni, de amit
>>irtam eleg egyertelmu mind fordito, mind felhasznalo szempontjabol.
>
> Viszont meg lehet csinalni nelkule is, raadasul a fordito ugyanazt a kodot
> generalja (szerinted legalabbis) -> felesleges.
Viszont kenyelmes.
> Mar igy is eleg sokan szidjak a C/C++-t azert, mert azonos dolgokat sokfele
> keppen lehet leirni. Miert kell ezeket az eseteket meg tovabb szaporitani?
Peldaul miket?
> A deklarico hibaja csupan annyi, hogy nem explicit benne, hogy lehetnek
> kellemetlen mellekhatasai. Leven a valtozoid kulon vannak delkaralva a
> forraskod olvasasa soran nem egyertelmu, hogy egy valtozo modositasa hathat
> mas valtozok ertekeire is. Ha mindent byte-nak (unsigned char-nak)
Akkor jobban tanulmanyozni kell a kodot es ertelmes valtozoneveket kell
hasznalni. Pl. NAGYBETUS neveket irkal az ember az ilyen valtozokhoz, akar
bit akar byte szelessegu.
> Bit-valtozoval nem definialod a viselkedest, sot meg csak nem is a
> forditora, hanem a CPU-ra bizod a dontest.
Ne keszits mar ki! Mar tisztaztuk, es 10 sorral feljebb te is irod, hogy
ugyanazt a kodot generalja. Akkor most mi van?
Egyebkent mondom azt is, hogy van a procinak ilyen utasitasa, es assemblyben
is van ilyen. Azert mert van egy-ket dolog amire figyelni kell, akkor inkabb
ne hasznaljuk?!
> Ez kb. ugyanaz, amit en leirtam: amig elfer egy int-ben (azaz a CPU 'nativ'
> tipusaban) addig oda kell rakni. De a sorrendre nezve semmi kikotes nincs.
> (Vagy van? Van valakinel kezeugyeben egy C szabvany?)
Igazad van, nem igazan portabilis (K&R):
It is advisable to read the language rules for storing bit-fields
as "implementation-dependent" without qualification. Structures with
bit-fields may be used as a portable way of attempting to reduce the
storage required for a structure (with the probable cost of increasing the
instruction space, and time, needed to access the fields), or as a non-
portable way to describe a storage layout known at the bit level.
> Nem ez a mondokam lenyege, hanem ez: nem difinalod pontosan a viselkedest,
> de a program mukodese fugg a viselkedestol. Azaz a
> fordito/kornyezet/processzor/architektura kenye-kedvere bizod az eredmenyt.
> Ez nem helyes. Egyebkent szerintem a sorrend fordito fuggo, de ez mellekes.
Akkor ha pl. ket 8-bites regiszterben megadott 10-bites ereteket hogy
konnvertalsz egy 16-bites valtozoba?
Te hasznalod inkabb a X=varH*256+varL variaciot a sokkal gyorsabb
varH<<8|varL megoldas helyett?
>>Ellenpelda: lasd Objektum Orientalt programozasi szemlelet. Atekinthetobb
>>mint a hasonlo funkcionalis megoldas, viszont joval szovodmenyesebb a
>>generalt kod.
>
> Ez bizonyos esetekben igaz, masokban nem. De itt mar programnyelvet valtasz
> (C->C++ pl.) arrol meg eddig nem volt szo.
Csak szemlelet valtas. C-ben is lehet objektum orientaltan dolgozni, csak
sokkal nehezebb :-)
> egy fordito, nem erdemesebb, valami legalabb reszben szabvanyos megoldast
> hasznalni: #pragma, __attribute__, stb.?
Hat igen, ez a javasolt.
>>Belegabalyodtal sajat allitasodba. A vita targya (static bit) konkretan
>>leirja mit akarsz. Ha x|=40-et irsz, az nem.
>
> Pont forditva. A bit-valtozo nem ir elo semmit a tobbi bitre vonatkozoan,
> mig az x|=0x40 az egesz byte-ra nezve ir elo viselkedest.
Van amikor a tobbi bitre nem is akarok eloirni semmit, mert csak egyet
akarok valtoztatni.
--
((( 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