Dubbio di programmazione: utilizzo di const piuttosto che di #define

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"?

grazie mille,
Luca

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 :slight_smile:

quindi sostanzialmente non c'è grossa differenza...ma sei sicuro che non occupino spazio in memoria?

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.

oooook! ora c'è più chiarezza nei mie pensieri :slight_smile: grazie a tutti che siete sempre disponibili ed esaustivi! :slight_smile: