switch case s intervalem

Vladimir66
Příspěvky: 262
Registrován: 02 dub 2014, 15:30

switch case s intervalem

Příspěvek od Vladimir66 » 28 dub 2018, 17:14

Ahoj,
objevil jsem tento typ zapisu, ale nekde pisou, ze by to nemuselo byt korektni.
testoval jsem to a v pohode. mate nekdo o tom nejake info nebo zkusenost ?

Kód: Vybrat vše


void setup() {

Serial.begin(9600);
unsigned int x=65535;

   switch (x) {
  
   case 1 ... 5:                     // interval 1 az 5
     Serial.print("1-5: "  ); 
     Serial.println(x); 
     break;

   case 6 ... 10:                    // interval 6 az 10
     Serial.print("6-10: " ); 
     Serial.println(x);  
     break;

   case 11 ... 255:                // interval 11 az 255      
     Serial.print("11-255: " ); 
     Serial.println(x);  
     break; 
    
   case 256 ... 1023:             // interval 256 az 1023
     Serial.print("256-1023: " ); 
     Serial.println(x);  
     break; 
    
   case 1024 ... 65535:             // interval 1024 az 65535
     Serial.print("1024-65535: " ); 
     Serial.println(x);  
     break; 
     } 
}

void loop() {

}







DavidO
Příspěvky: 606
Registrován: 01 kvě 2013, 21:27

Re: switch case s intervalem

Příspěvek od DavidO » 28 dub 2018, 18:40

Kdybys pořádně sledoval fórum, tak to víš - psal jsem to k čemusi jako poznámku ani ne před rokem a půl ;) :
viewtopic.php?f=13&t=695&p=5613#p5566

tomasp
Příspěvky: 41
Registrován: 15 dub 2014, 23:01

Re: switch case s intervalem

Příspěvek od tomasp » 28 dub 2018, 18:46

Ty námitky asi plynou z toho, že tahle forma case není ve standardu C/C++, ale je to rozšíření (extension) gcc (to je jedna konktrétní implementace kompileru). Mimochodem, říká se tomu Case-Ranges https://gcc.gnu.org/onlinedocs/gcc/Case ... ase-Ranges

Takže tenhle kód dokáže zkompilovat právě gcc, pár dalších také (Clang, Intelovský icc) , ale jiné zase ne (Microsoftí Visual C++).

S Arduino IDE na různých platformách (linux, windows, mac ...) nemám zkušenosti, ale pochybuji, že by si komplikovali situaci a používali někde neco jiného, než gcc.

Ale pokud bys snad v budoucnu začal programovat desktopovou aplikaci pod MS Visual Studio, a tuhle část programu okopíroval, tak se nepřeloží.

Edit: Safra, David byl rychlejší ...

Vladimir66
Příspěvky: 262
Registrován: 02 dub 2014, 15:30

Re: switch case s intervalem

Příspěvek od Vladimir66 » 28 dub 2018, 21:09

diky za vysvetleni, ja mel spise obavu, ze ten preklad v gcc nemusi byt spravny/spolehlivy.
v manualech k Arduinu se to moc nevyskytuje.
to David: vzhledem k tomu, ze intenzivneji programuji pouze 2mesice do roka (pred Robotickym dnem), tak tyto veci v hlave fakt neudrzim. :)
ano, mel jsem se podivat do historie fora...
-V66
Naposledy upravil(a) Vladimir66 dne 28 dub 2018, 21:15, celkem upraveno 1 x.

DavidO
Příspěvky: 606
Registrován: 01 kvě 2013, 21:27

Re: switch case s intervalem

Příspěvek od DavidO » 28 dub 2018, 21:14

Dokonce 2 měsíce??? Je vidět, že jseš už stará páka - mlaďoši programujou tak ten poslední týden předem :lol:

Vladimir66
Příspěvky: 262
Registrován: 02 dub 2014, 15:30

Re: switch case s intervalem

Příspěvek od Vladimir66 » 28 dub 2018, 21:19

"stara paka" zni lip nez "stary pako" :)

DavidO
Příspěvky: 606
Registrován: 01 kvě 2013, 21:27

Re: switch case s intervalem

Příspěvek od DavidO » 28 dub 2018, 21:56

Myslel jsem tím samozřejmě "pracovník s dlouholetými zkušenostmi, který se nenechá ničím zaskočit" :D
(zejména ne tím, co mladá paka snadno odrovná)

Uživatelský avatar
gilhad
Příspěvky: 165
Registrován: 29 kvě 2015, 00:36

Re: switch case s intervalem

Příspěvek od gilhad » 29 dub 2018, 13:19

V manualech k Arduinu se dost snazi utajit, ze jde vlastne o Ccko s knihovnama, aby chudaky zacatecniky nevystrasili k smrti tim, ze maji pouzitelny jazyk. Misto toho radsi rikaji Wiring (coz je takova knihovna, co ma funkce jako 'digitalRead' a tak) a probiraji zejmena tu nejzakladnejsi a nejjednodussi syntaxi, jen aby toho nebylo moc a nebylo to slozite.

Arduino vubec neni urceno pro programatory, ale pro kreativni umelce. To, ze to programtori stejne pouzivaji a pouzivaji i programovaci jazyk, nejen copy-paste priklady z manualu, jen ukazuje, jaka strasna chaska jsou ti programatori a ze jim nic neni svate :)

Uživatelský avatar
Dex
Administrátor
Příspěvky: 922
Registrován: 16 úno 2013, 14:26

Re: switch case s intervalem

Příspěvek od Dex » 30 dub 2018, 10:17

Obecná filosofická poznámka: to že jde něco nějak napsat, je to syntakticky správně a funguje to, ještě neznamená, že je vhodné to tak psát :-)

Prostě je často lepší napsat to tak, jak se to obvykle píše a pokud pár řádků navíc zpřehlední kód i pro ty, co ho vidí poprvé (může se opakovat i u stejné osoby několikrát ;)), tak je to lepší ;)

Tato poznámka je obecně vzdělávací a nemusí se nutně vztahovat na tento konkrétní případ :)
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

Vladimir66
Příspěvky: 262
Registrován: 02 dub 2014, 15:30

Re: switch case s intervalem

Příspěvek od Vladimir66 » 01 kvě 2018, 22:31

Zajimave cteni. switch- case nemusi byt vzdy nejlepsi volba..
https://blog.kriegsman.org/2013/12/01/o ... g-so-am-i/

P.S. v mem Arduinu jsem na 90ti % pameti a kompilator uz se zadychava. knihovny sebraly 80% a tak setrim kazdy bajt.
To programovani je jeste napinavejsi, nez loni.

-V66

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host