[elektro] C kérdés plusz

Moczik Gabor pm_levlista at progzmaster.hu
Fri May 16 22:30:25 CEST 2008


Kovács Árpád wrote:
> Az egyik Hg  switch témájával kapcsolatban jött: nevezetesen olvastam egy C 
> könyvben, hogy idézem: "a C nyelv készítői a goto utasítás létrehozását 
> azzal indokolták, hogy a break utasítás egymásba ágyazott ciklusok esetén 
> mindig csak egy szintet lép vissza, ezért ha egy belső ciklusból akarjuk az 
> egész szerkezetet elhagyni szükség lehet egy címre történő ugrásra." 
> Felhívja a figyelmet a könyv, hogy lehetőség szerint a goto-t kerüljük. 
> Kérdésem, hogy akkor mivan, ha akkor az adott részt egy függvénybe rakom, 
> akkor a return-el is bárhonnan kiszálhatok. Vagy így feleslegesen növelem a 
> kódot?

Attol fugg. Nem a kodmeret ami lenyegesen novekszik egy beleforditott CALL 
meg RET utasitas miatt, hanem a vegrehajtasi ido, ami esetleg problema. Meg 
ha esetleg a ciklusvaltozok erteke kellene a torzsben, akkor at kell adni 
parameterkent, ez plusz nehany regisztermasolas. Ha piszkalni kell a 
ciklusvaltozokat a torzsben, akkor meg pointerkent kellene atadni, az megin 
nem biznisz...

Ha ki kell ugrani a belso ciklusbol az egeszen kivulre, akkor pl. olyan 
erteket adsz az osszes ciklusvaltozonak amivel vegeter a ciklusfeltetel.

> Másik téma már jobban izgat: ez az ún. cast-olás. Gyakori, hogy eltérő 
> bitszélességű változok kerülnek egy képletbe. Ilyenkor van aki mindent 
> cast-ol, kikényszerít, stb, biztos ami biztos alapon, hogy az eredmény 
> helyes legyen. Van aki kisérletezik párat, hogy lesz jó, nem sokat vacakol. 
> Én pedig szeretném inkább megérteni, mi a lelkivilága ennek a dolognak. 
> Valaki el tudná röviden mondani, hogy a fordító hogyan "gondolkodik" 
> ilyenkor? Mikor kötelező és mikor nem kell cast, mikor áll fenn a csonkolás 
> veszélye?

Pontosan nem tudom, mert en is inkabb castolgatok ha vegyes dolgokat kell 
egy kepletbe rakni, de ugy nez ki, balrol jobbra ertekeli ki, amit eloszor 
talal, azzal a szelesseggel folytatja. Az elso elemet celszeru cast-olni 
akkorara, amibe az eredmenynek bele kell fernie.

Ha u16=u8*u16 kepletet irsz, bar az eredmeny valtozo 16 bit, akkor se fogja 
16 biten vegezni a szorzast, csak 8-on, es majd az eredmenyt castolja 16 bitre.

> Ja és még egy: pl. a 256L felírás ugyanazt eredményezi, mint a (long)256?

Igen.

-- 
((( Móczik Gábor  )))--((( E~mail: "pm-01" @AT "progzmaster" .DOT "hu" )))
((( Skype: moczik )))



More information about the Elektro mailing list