[elektro] C kérdés
hg12345
hg12345 at freemail.hu
Tue May 13 11:51:28 CEST 2008
Papp Zoltán <zombi at c2.hu> írta:
> 2008.05.13. 09:22:01 dátumon hg12345 <hg12345 at freemail.hu>
írta:
>
> > Adott a
> >
> > switch (v)
> > {
> > case 1:
> > if (feltétel)
> > {
> > case 2:
> >
> > };
> > break;
> >
> > case 3:
> > for(i=0;i<100;i++)
> > {
> > case 4:
> > };
> > break;
> >
> > }
> >
> > A fenti példa lefordul a GNU 4.02 (4.03) alatt és nem jelez hibát.
> > A Kernighan könyv erről nem ír egy szót se.
> > Ha nem tiltott, akkor szabad a switch tartományán belül akárhová
> > beugrani? Erre nincs kitétel a C leírásban.
> > Még az if esetén elmegy, de egy ciklusba igy belépni nem
> > meghatározható jelenségekhez vezethet.
> >
> > és még nem ajálják a goto-t :-(), de eszerint hasonló
> > meggondolatlanságot is el lehet követni, fordító álltal támogatott
> > formában is!
> >
> > Nálam egy if feltétel mögé kéne beugrani, kirpóbáltam és
lefordította és
> > nem csak ezt... (de nem merem használni)
> > Van erre valami ajánlás, szokvány vagy máshol ilyen felse merül?
>
> Hát ez így biztosan nem szabványos. a GOTO-val nincs semmi baj,
minden
> program tele van goto-val (lefordítva gépi kódban), max. a
felhasználó nem
> látja :-)
Ezt tudom :-()
> Itt az a baj, hogy egy ciklusba ugrasz be, ahol egyrészt a fordító egy
> ciklusváltozót inicializál, ami így kimarad, és így a kilépési feltételről
> sem tudunk semmit, azaz nagy hülyeségek jöhetnek ki belőle.
> Gondolm a case2 és case4 esetben csak egyszer kellene lefutnia a
> ciklusnak, erre használhatsz inline fgv-t, vagy csinálhatod így is:
>
Nem még véletlenül se szeretnék belépni inicializálás nélkül egy
ciklusba, de egy feltételes elágazás egyik ágába mondjuk igen.
A kérdés teljesen elméleti volt, hogy jogos a switch ilyen kifejtése a
fordítótól vagy nem, esetleg más forditó ezt a kódot nem igy
értelemezi. Mivel a megtalált C leírások erről nem beszélnek ez
gondolom ez fordió implementáció függő....
> switch (v)
> {
> unsigned char x=0; //ezt hirtelen nem tudom ide lehet-e. Ha nem,
akkor a
> switch előtt kell defininálni+nullázni
>
> case 1: if (feltetel) x=1;
> case 2: if (x || (2==v)) { blabla };break;
> case 3: x=100;
> case 4: {if (!x) x=1;for (i=0;i<x;i++) { blabla};};break;
> }
>
> Ez így elméletileg működhet, csak ez se túl szép :-)
>
> Üdv
>
> --
> Papp Zoltán
> OneWay Electronics Kft
> Hangszerviz
>
> -----------------------------------------
> elektro[-flame|-etc]
>
_______________________________________________________
TEGYÉL FEL egy apróhirdetést és TEGYÉL EL egy Nintendo Wii játékkonzolt.
Tegyél érte egy kattintást ide >>> http://ad.adverticum.net/b/cl,1,6022,263992,316992/click.prm
More information about the Elektro
mailing list