Salve a tutti,
stavo scrivendo uno sketch e sto usando uno switch/case per testare una variabile char, usando la label 0xFF però segnala 2 errori di compilazione, cioè che il valore della label supera il valore massimo del tipo e che le istruzioni non verranno mai eseguite.
Ho scritto uno sketch minimale solo con quel pezzo di codice ed effettivamente continua a segnalare l'errore:
char test;
char prova;
void setup() {
// put your setup code here, to run once:
test=0xff;
Serial.println(test,HEX);
switch (test){
case 0xff:
prova=0xff;
Serial.println(prova,HEX);
break;
}
}
void loop() {
// put your main code here, to run repeatedly:
}
questo quello che restituisce il compilatore:
C:\Arduino\sketch_may15b\sketch_may15b.ino: In function 'void setup()':
C:\Arduino\sketch_may15b\sketch_may15b.ino:8:5: warning: case label value exceeds maximum value for type
case 0xff:
^~~~
C:\Arduino\sketch_may15b\sketch_may15b.ino:9:10: warning: statement will never be executed [-Wswitch-unreachable]
prova=0xff;
~~~~~^~~~~
In assegnazzione del valore 0xFF non da errore (se assegno ad esempio 0xFFF ovviamente segnala l'overflow) non capisco quindi il perchè dell'errore nello switch visto che il char dovrebbe essere di 8 bit e quindi il valore FF potrebbe essere contenuto nella variabile, al di là della sua rappresentazione.
Inoltre se testo la varibile con un if invece dello switch/case, non segnala alcun errore e compila liscio:
char test;
char prova;
void setup() {
// put your setup code here, to run once:
test=0xff;
Serial.println(test,HEX);
if (test==0xff){
prova=0xff;
Serial.println(prova,HEX);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
La versione dell'IDE installata è la 1.8.12 .
Vorrei capire dove sto sbagliando e grazie dell'aiuto,
ciao.