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

Móczik Gábor pm_levlista at progzmaster.hu
Sat Nov 12 00:17:27 CET 2011


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.



More information about the Elektro mailing list