Qual è ' la differenza tra #define e const int quando si dichiara un pin? [duplicate]

Questa domanda ha già una risposta qui :

Commenti

  • Immagino che tu intenda #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.
  • @MikaelPatel esattamente … quindi in pratica il int è meglio, vero?
  • Sì. Aggiorna il titolo e rimuovi " include ". È qualcosa di completamente diverso e non correlato 🙂
  • Di solito preferisco usare enum per le costanti di numero intero o di carattere piuttosto che per #define o const int. Vedi la risposta accettata a È meglio usare #define o const int per le costanti? ,

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 “).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *