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

Skandar Graun sgraun at gmail.com
Sat Nov 12 10:30:39 CET 2011


Egyébként a basic select - case szerkezete tulajdonképp ennek a
szinonímája... ott enged tartományt, a fordításnál meg két
határfigyelés kerül be...

2011/11/12 Lajos Rancz <lajos.rancz at gmail.com>:
> 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]
>>
> -----------------------------------------
>          elektro[-flame|-etc]
>



More information about the Elektro mailing list