[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&#337;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&#337;l  
> sem tudunk semmit, azaz nagy hülyeségek jöhetnek ki bel&#337;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&#337;l nem beszélnek ez 
gondolom ez fordió implementáció függ&#337;....


> switch (v)
> {
>    unsigned char x=0; //ezt hirtelen nem tudom ide lehet-e. Ha nem, 
akkor a  
> switch el&#337;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&#369;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