[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