Sto usando un Arduino Mega 2560 con IDE 2.1.0.
Chiedo se è normale che quando richiamo una funzione void al cui interno si trova una istruzione Serial.println quest'ultima non venga eseguita, vedi il semplice sketch:
Grazie della risposta DATman, e soprattutto del link.
Ho fatto la presentazione ma in quanto al regolamento che vedo citato in molti messaggi di altri iscritti , anche se ho capito che ha almeno 15 punti, lo leggerei volentieri ma non riesco a trovarlo.
Aaargh!... un vero errore da pivello.
Grazie Guglielmo !
Essendo un principiante su questo linguaggio mi fidavo del compilatore per la segnalazione di eventuali sciocchezze.
Purtroppo nelle preferenze della IDE avevo lasciato il default come livello di segnalazione dei warning.
Adesso ho impostato "Tutti" e in effetti ora il compilatore avvisa che il codice ha un problema:
C:\..........\prova\prova.ino: In function 'void loop()':
C:\.........\prova\prova.ino:14:10: warning: statement is a reference, not call, to function 'accetta' [-Waddress]
accetta;
^
C:\..........\prova\prova.ino:14:10: warning: statement has no effect [-Wunused-value]
Adesso però dovrò andarmi a studiare la differenza tra una reference e una call a una funzione
Un potenziale problema. Infatti, con o senza i warning abilitati, la compilazione va a buon fine, non ci sono errori sintattici e il codice è perfettamente eseguibile.
In questo specifico caso il problema c'era, ma per un errore di semantica, cioè credere che una certa istruzione faccia qualcosa mentre in realtà fa altro.
Il fatto è che nel linguaggio ci sono le "cose", e ci sono i riferimenti alle cose, banalmente gli indirizzi di memoria dove si trovano le cose. Di questi indirizzi normalmente non c'è bisogno di occuparsi, ma se serve si gestiscono tramite puntatori.
Sintatticamente un nome di funzione senza parentesi di chiamata indica il riferimento alla funzione, che in alcuni casi specifici e non terra terra può essere salvato in un puntatore per richiamare la funzione in modo indiretto.
Ad esempio potremmo avere un array di puntatori a funzione per chiamare una funzione specifica in modo indiretto tramite un indice:
Per incoraggiarti ti posso assicurare che dal C/C++ puoi aspettarti di mooolto peggio che questo banale errore.
Quindi non prenderlo sotto gamba, anzi consideralo come il linguaggio
più bastardo che ci sia e che si prende gioco principalmente del principiante, ma ottiene buoni risultati anche con il programmatore maturo, che finisce per prendere fischi per fiaschi.