switch case s intervalem

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

switch case s intervalem

Příspěvek od Vladimir66 »

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: 1133
Registrován: 01 kvě 2013, 21:27

Re: switch case s intervalem

Příspěvek od DavidO »

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
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
tomasp
Příspěvky: 55
Registrován: 15 dub 2014, 23:01

Re: switch case s intervalem

Příspěvek od tomasp »

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: 385
Registrován: 02 dub 2014, 15:30

Re: switch case s intervalem

Příspěvek od Vladimir66 »

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: 1133
Registrován: 01 kvě 2013, 21:27

Re: switch case s intervalem

Příspěvek od DavidO »

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:
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: switch case s intervalem

Příspěvek od Vladimir66 »

"stara paka" zni lip nez "stary pako" :)
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: switch case s intervalem

Příspěvek od DavidO »

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á)
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Uživatelský avatar
gilhad
Příspěvky: 262
Registrován: 29 kvě 2015, 00:36
Kontaktovat uživatele:

Re: switch case s intervalem

Příspěvek od gilhad »

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: 1519
Registrován: 16 úno 2013, 14:26

Re: switch case s intervalem

Příspěvek od Dex »

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
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: switch case s intervalem

Příspěvek od Vladimir66 »

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