differenze di definizione

Che differenza c'è tra

#DEFINE ledPin 2

e

const int ledPin = 2;

ho letto nel reference che sarebbe meglio usare la const per la definizione delle costanti

#DEFINE fa una sostituzione nel preprocessore prima di compulare lo sketch. Fa usa sostituzione di testo. Si usa per fare piú leggibile il sketch e nello stesso momento risparmia della RAM perché non vengono usate variabili.
digitalWrite(ledPin,HIGH); diventa digitalWrite(2,HIGH);

const int ledPin = 2; é una definizione di una variabile del tipo di sola lettura. Non puoi modificare il contenuto.

Ciao Uwe

A livello di "prodotto finito" (... ovvero del compilato), oggi come oggi, con le ottimizzazioni che fanno i compilatori, non hai differenza.

La differenza ce l'hai però proprio in fase di compilazione perché, nel caso del #define, il valore definito viene semplicemente sostituito a dove incontra il simbolo dichiarato, nel secondo caso, dichiari anche il TIPO (byte, int, long, ecc.)e quindi il compilatore può fare tutti i controlli del caso e, magari, darti dei warning ove ci fossero incongruenze.

Guglielmo

ok quindi sostanzialmente ci sono leggerissime differenze. grazie a tutti e 2 :slight_smile:

Han già detto tutto, ma sottolineo che per questa definizione di costanti è preferibile usare const e non usare più #define

un problema che hai con le defeine e non con le const: essendo le define un "cerca e sostituisci" se io scrivo

#define pin 3

int pin_led = 5;

avrai un errore in compilazione perchè il PRE-compilatore farà la sostituzione ed avrai

int 3_led = 5;

invece la const, lavorando con variabili, esegue già tutti i vari