Il punto e virgola è usato come segno di terminazione istruzione, ma non è da usare nelle istruzioni composte: if, for, while, do while e la direttiva per il preprocessore #define.
Di seguito alcuni esempi che mettono in evidenza questo tipico errore.
Versione non corretta
if (temperatura > 25); // questo punto e virgola non è corretto { digitalWrite (normaleTemp, LOW); digitalWrite (allarmeTemp, HIGH); } for (int i = 0; i < 15; i++); // questo punto e virgola non è corretto digitalWrite (i, HIGH);
I punti e virgola indicati nell’esempio sopra terminano le istruzioni “if” e “for” e ciò non permetterà l’esecuzione delle istruzioni che sono presenti nel corpo delle rispettive istruzioni.
Versione corretta
if (temperatura > 25) { digitalWrite (normaleTemp, LOW); digitalWrite (allarmeTemp, HIGH); } for (int i = 0; i < 15; i++) digitalWrite (i, HIGH);
In questo caso le istruzioni presenti nel corpo della if vengono eseguite se la condizione temperatura>25 è vera, nel secondo caso, nel for, sarà eseguita l’istruzione che segue fino a quando la condizioni<15 risulta vera.
Come si può notare nel for, nel caso in cui sia presente una sola istruzione nel corpo, non è indispensabile inserire le parentesi graffe, non è comunque un errore inserirle e scrivere:
... for (int i = 0; i < 15; i++) { digitalWrite (i, HIGH); }
Errore simile viene spesso commesso quando si usa il #define
Versione non corretta
#define PIN_LED 8; // non bisogna inserire il punto e virgola #define PIN_LED = 8; // non bisogna inserire ne = e ne ;
Versione corretta
#define PIN_LED 8
il #define non richiede il punto e virgola.
Possiamo ottenere lo stesso risultato dell’istruzione precedente utilizzando const:
const byte PIN_LED = 8;
Questa scrittura rimane coerente rispetto alla scrittura delle variabili che fa uso dei simboli = e ; ma non efficiente dal punto dello spazio di memoria utilizzata rispetto alla #define.
Buon Coding a tutti 🙂