Archivi tag: terminazione istruzione

Errori comuni nell’uso di Arduino – inserimento del punto e virgola alla fine di ogni istruzione

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

1if (temperatura > 25);          // questo punto e virgola non è corretto
2{
3  digitalWrite (normaleTemp, LOW);
4  digitalWrite (allarmeTemp, HIGH);
5}
6 
7for (int i = 0; i < 15; i++);   // questo punto e virgola non è corretto
8  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

1if (temperatura > 25)
2{
3  digitalWrite (normaleTemp, LOW);
4  digitalWrite (allarmeTemp, HIGH);
5}
6 
7for (int i = 0; i < 15; i++)
8digitalWrite (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:

1...
2for (int i = 0; i < 15; i++)
3{
4  digitalWrite (i, HIGH);
5}

Errore simile viene spesso commesso quando si usa il #define

Versione non corretta

1#define PIN_LED 8;    // non bisogna inserire il punto e virgola
2#define PIN_LED = 8;  // non bisogna inserire ne = e ne ;

Versione corretta

1#define PIN_LED 8

il #define non richiede il punto e virgola.

Possiamo ottenere lo stesso risultato dell’istruzione precedente utilizzando const:

1const 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 🙂