[elektro] C kérdés plusz

Kovács Árpád arpad.kovacs at freemail.hu
Fri May 16 21:47:33 CEST 2008


Sziasztok!

Most, hogy így benne vagyunk a témában nekem is eszembe jutott két dolog, 
amiben kérdeznék a C szakértőktől.

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?

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?
Mutatok két példát, amit kipróbáltam, a példákban nem előjeles 8, 16 és 32 
bites változók vannak:

u32valtozo = u8valtozo * 256 * u16valtozo;            //így nem volt jó az 
eredmény
u32valtozo = u8valtozo * 256L * u16valtozo;          //így jó volt az 
eredmény

Másik példa:

u32valtozo = 256 * u16valtozo;                                 //így nem 
volt jó volt az eredmény
u32valtozo = (unsigned long) 256 * u16valtozo;        //így jó volt az 
eredmény

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

Köszi,

Árpi




More information about the Elektro mailing list