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

Lajos Rancz lajos.rancz at gmail.com
Sat Nov 12 08:00:51 CET 2011


Helló!

Persze igen, nem buta. Csak arra próbáltam rávilágítani, hogy nem
feltétlenül azt csinálja a compiler amit mi szeretnénk, és nehéz
befolyásolni, hogy mi történik. Ez a default-os ötlet nem rossz, azt
nézted, hogy mire fordul ugrótáblára vagy if-es szerkezetre?

Valakik, annyira ragaszkodnak a switch-case szerkezethez, hogy már láttam
ilyet:
#define SWITCH if (false)
#define CASE(cond) else if (cond)
#define DEFAULT else

És akkor:
string s;
SWITCH
CASE (s == "Dolog1") { .... }
CASE (s == "Dolog2") { .... }
DEFAULT { ... }

:))))

Üdv


2011/11/12 Móczik Gábor <pm_levlista at progzmaster.hu>

> 2011.11.10. 17:00 keltezéssel, Lajos Rancz írta:
> > 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;
>
> Szerintem a compiler se teljesen hülye, biztosan van egy limit amit
> figyelembe vesz, és ha van egy 5 állapotú választás, arra csinál egy
> ugrótáblát, ha meg 1, 100, 100000 közül kell választani, akkor nem.
>
> Azt szoktam csinálni, hogy ha van sok definiált gyakori érték amire
> dönteni kell, meg van pár tartomány amire másképp, akkor a default ágba
> teszem:
>
> switch(x) {
>     case 1:
>         ... break;
>     case 2:
>         ... break;
>     case 3:
>         ... break;
>
>     // ...
>
>     default:
>         if (x>=20 && x<=40) {
>             ...
>         } else  ...
> }
>
> Mindig azt kell választani ami a feladatnak megfelel, pl. ha itt
> jellemzően a default ág futna le a leggyakrabban, akkor ez így nem túl
> hatékony, akkor inkább azt kell kívülre tenni, és a case szerkezetet az
> else ágba.
>
> Egyébként én is jobban szeretem a switch/case szerkezetet, ahol csak
> lehet, mert sokkal áttekinthetőbb mint egy rakás if/else. Még akkor is,
> ha tartományra kell választani, de a tartomány nem széles, olyankor jön
> a pár felsorolt case, break nélkül.
>
> -----------------------------------------
>          elektro[-flame|-etc]
>


More information about the Elektro mailing list