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