Commenti
Risposta
“#define” è una direttiva del preprocessore. Definisce unetichetta e un valore, che saranno posizionati nel codice sorgente preelaborato nello stesso punto di ogni occorrenza delletichetta. Nessun tipo è definito, quindi è una semplice e stupida sostituzione di stringhe prima della compilazione. Può quindi portare a errori o incomprensioni durante la compilazione.
“const int xxx” definisce un tipo e blocca il valore di quellistanza. È più sicuro utilizzare questo metodo. Il compilatore può verificare la presenza di errori di tipo e lanciare messaggi (o interrompere la compilazione) se hai commesso un errore.
Esempio:
#define A 5 int dummy_integer = A
… sarà preelaborato come …
int dummy_integer = 5
… e il compilatore leggerà questa istruzione.
Tuttavia, se ricordo bene, puoi sempre sovrascrivere una direttiva del preprocessore come segue:
#define A 5 int dummy_integer = A //some code here #undef A #define A "my_string" std::cout << A
“Non va bene. Usando il modificatore “const”, invece, non puoi “cambiare il valore (né il tipo) di una variabile (e quindi viene definita” costante “).
#define
invece di#include
. Il modo più professionale per dichiarare i pin èconst int myPin = ...
Questo aiuta il compilatore a capire che si tratta di un valore costante e che non è richiesta la memorizzazione. È leggermente migliore di#define
in quanto fornisce le informazioni di compilazione sul tipo di dati.int
è meglio, vero?enum
per le costanti di numero intero o di carattere piuttosto che per#define
oconst int
. Vedi la risposta accettata a È meglio usare #define o const int per le costanti? ,