[elektro] Buta C kérdés switch/case

Lajos Rancz lajos.rancz at gmail.com
Thu Nov 10 17:00:34 CET 2011


Hello!

Ez igy van, de a switch-case konstrukcio nehany elem szetdobalasara lett
kitalalva (tipikusan allapotgepekhez). Ebbe a logikaba nem annyira fer bele
a tartomany, az egy masik konstrukcio.

A switch-case kombinaciot se mindig ugrotablara forditja, hanem if-else-re,
pl az altalunk hasznalt ARM926EJ-S - gcc kombonal egy ilyen switch-nel:
switch (i)
{
case 0: .... break;
case 5: .... break;
case 23: .... break;
}

De mit szolnal hozza, ha lenne intervallumos konstrukcio es az alabbi
kodra csinalna neked egy 100 ezer elemu ugrotablat?
switch (i)
{
case 0-50000: ... break;
case 50001-100000: ... break;
default: ... break;
}

Nehez megszokni, hogy a compiler nem olyat fordit mint amit az ember maga
irna gepikodban, de idaig mindig megszivtam, ha megprobaltam tuljarni az
eszen.
Ha teljesen standard modon programozol, nem tersz el a bevalt receptektol
akkor a compiler felismeri a patternt es tud optimalizalni. Ha varialsz,
okosba probalod akkor nem ismeri fel es leforditja butan.

Udv

2011/11/10 hg12345 <hg12345 at freemail.hu>

> Mert a switch/case jobb fordítók akár ugrótömbbel tudják helyettesíteni,
> mig a elseif megoldást tudtommal nem.
>
> Amúgy a szerintem a switch jobban olvasható és bővithető mint az elseif
> persze ez már teljesen szubjektiv.
>
>
> Lajos Rancz <lajos.rancz at gmail.com> írta:
> >Hello!>
> >
> Miert nem jo az if else if else konstrukcio?>
> >
> Udv>
> >
> 2011. november 10. 16:20 Elight írta, <elight at gmail.hu>:>
> >
> > Ha C család>
> > már eccer szívtam vele én is.>
> > Utána jártam és az okosok szerint nem.>
> >>
> > case 'A':>
> > case 'B':>
> > case 'C':  .... break;      //  A..C  esetben mindig lefut.>
> >>
> > sorozatot tehárt én sem tudtam kikerülni.>
> > Más nyelvekben pl  Perl tényleg van hasonló toól-igolás is.>
> >>
> > Üdv István>
> >>
> > 2011.11.10. 15:51:14 dátumon hg12345 <hg12345 at freemail.hu> írta:>
> >>
> > > Hi>
> > >>
> > > elvileg kéne müködnie a case ágban a taratomány megadásnak>
> > >>
> > >     case  5...30:>
> > >>
> > > de fordítás után hiányolja a ":" és nem csinál futtatható kódot. A>
> > > forditó elméletig ismeri "KEIL C" a help-je tartalmaz ilyen>
> > > mintapéldást, de az se müködik....>
> > >>
> > > Ez most tartalmazza az ANSI C vagy nem?>
> > >>
> > >  Üdv>
> > >       Gábor>
> > >>
> > > ----------------------------------------->
> > >           elektro[-flame|-etc]>
> >>
> >>
> > -->
> > Az Opera forradalmian új levelezőjét használva:
> http://www.opera.com/mail/>
> >>
> > ----------------------------------------->
> >          elektro[-flame|-etc]>
> ----------------------------------------->
>          elektro[-flame|-etc]>
>
>
> -----------------------------------------
>          elektro[-flame|-etc]
>


More information about the Elektro mailing list