[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