Ciao a tutti, stavo leggendo un po' di discussioni sul forum e mi è sorto un dubbio.
nella maggior parte dei programmi che trovo in rete (ma anche sui libri) le costanti utilizzate vengono tipicamente dichiarate:
const int costante = valore;
mentre io sono abituato ad utilizzare
#define costante valore
che io sappia la differenza sta nel fatto che con "const" il valore viene memorizzato e occupa memoria, mentre con "define" viene sostituito in fase di compilazione, non occupando memoria e rendendo più veloce l'esecuzione. inoltre con "define" è possibile utilizzare le cosidette macro.
Qualcuno mi potrebbe spiegare perchè in maggioranza venga utilizzato "const" e se c'è qualche vantaggio nell'utilizzarlo rispetto a "define"?
se non erro in fase di compilazione, almeno per arduino, le const vengono fisicamente sostituite, esattamente come la define. Quindi l'utilizzo di const è preferibile nel caso di variabili perchè "più pulito" da vedere. Certo non ha la potenza delle define
Confermo quanto detto da lesto.
Tempo fa feci la stessa identica domanda e feci qualche test per vedere come il compilatore si comportava nel trattare const e #define. Alla fine venne fuori che non c'erano differenze di sorta.
Io ultimamente tendo a prediligere const per dichiarare variabili immutabili perché i #define preferisco lasciarli per le direttive vere e proprie per il compilatore e non per definire costanti che, a logica mia, riguardano il mio programma e non come avr-gcc deve trattare il mio sketch.
LucaGilardi:
che io sappia la differenza sta nel fatto che con "const" il valore viene memorizzato e occupa memoria, mentre con "define" viene sostituito in fase di compilazione, non occupando memoria e rendendo più veloce l'esecuzione. inoltre con "define" è possibile utilizzare le cosidette macro.
La differenza tra const e define è che la prima la usi esclusivamente per definire un dato, la seconda puoi usarla per definire qualunque cosa, pure del codice sotto forma di macro.
Non è completamente vero che const e define non occupano memoria, in realtà ogni volta che viene inserito il relativo valore, o definizione, nel programma questo andrà ad occupare lo spazio necessario a quanto definito a meno che non si tratti di calcoli tra costanti, in questo caso viene risolto direttamente dal preprocessore e inserito direttamente il valore elaborato.