Salve raga, quando si inizia a scrivere un qualsiasi codice, ma prendendo per esempio il semplice blink ci si comincia sempre col dichiarare pin/variabili/ecc.
Scrivere questo
porta allo stesso risultato. Ma quali sono allora le effettive differenze.
Io ho provato a modificare tutte le dichiarazioni const int in #define di un mio vecchio progetto, ma alla fine non vi sono state alcune modifiche (almeno all'apparenza) ne in termini di prestazioni ne in termini di spazio occupato nel programma.
Ne parlammo un pò di tempo fa.
In teoria la #define non occupa memoria perchè fatta una semplice sostituzione dal precompilatore.
Una variabile const in teoria occupa della memoria che il compilatore controlla non fai poi comandi di scrittura sopra.
Sul compilatore gnu che viene usato per compilare per avr, la const si comporta come la define, ovvero è come una semplice sostituzione, ovvero non viene allocata una variabile non modificabile.
Ma questo comportamento non è assicurato su tutti i compilatori.
Se puoi usare una costante dichiarata con const, in generale è meglio, perché almeno la costante ha un tipo e il compilatore te ne segnalerà eventuali utilizzi impropri. Se ad esempio dichiari un pin const String, probabilmente qualcosa non andrà per il verso giusto. Inoltre anche i messaggi di errore che il compilatore ti darà dovrebbero essere più chiari. Non ti preoccupare dell'uso di memoria, il compilatore è abbastanza sveglio da capire che non ha bisogno di occupare memoria per qualcosa che non cambia mai, quando ne può fare a meno.
#define è una semplice sostituzione testuale, simile al Trova/Sostituisci, almeno in casi come questo. Funziona ma è più grezzo e non c'è motivo per usarlo qua. La sua potenza viene messa in risalto quando lo usi per realizzare delle macro (ma anche qua, oggi puoi sostituirla con una funzione inline) o quando vuoi "manipolare" i token che definisci, caso comunque relativamente poco frequente e comunque di utilizzo avanzato.
...ma comunque leggendo qua e la un po tutti preferiscono dichiarare const int led = 3; piuttosto che col #define. fortunato che sono abituato ai const int...
miky_police:
...ma comunque leggendo qua e la un po tutti preferiscono dichiarare const int led = 3; piuttosto che col #define. fortunato che sono abituato ai const int...
... e fai male, dato che, nel caso dei pin, ti basta e avanza arrivare a 255 ... perché sprecare lo spazio di un int ? ? ? Non ti piace un byte ? ... const byte led = 3;