[elektro] C kérdés

István hobilobi at gmail.com
Tue May 13 22:27:45 CEST 2008


hg12345 í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!

A fordító csak szintaktikailag ellenörzi a programot. Ha hülyeséget csinálsz (pl. beugrasz egy 
ciklusba az inicializálás megkerülésével) az a te bajod.
A fordító nem tudhatja, hogy ezt tudatlanságból csináltad, vagy valami körmönfont trükköt 
alkalmazol.
Léteznek szemantikai ellenörző programok amik felhívják az ilyenekre a figyelmedet, aztán te 
döntesz, hogy az tényleg hiba mert nem úgy akartad, vagy figyelmen kivül hagyod, mert azt 
tényleg úgy akartad és szerinted az jó lesz.
Sokan éppen ezért szeretik a C-t, mert nagy a szabadság a program írásában.


-- 
Szabados István



More information about the Elektro mailing list