il #define?

In realtà c'è ben poco da illustrare, nonostante le guide e gli esempi, non riesco bene a comprendere la differenza pratica di suddetta istruzione :~
Perchè non utilizzare una variabile ma un #define, per impostare il collegamento di un led ad un pin per esempio?

#define LED 13
int  led = 13;

Col primo crei un etichetta "LED" che verrà sostituita prima di compilare il programma col numero 13.
Nel secondo caso crei una variabile di nome "led" che vale 13.
Di solito si usa il #define quando devi indicare dei dati fissi, ovvero che non verranno cambiati durante l'esecuzione del programma.

Ti rinvio a questa pagina che spiega per bene le direttive preprocessore e altre cosette --> http://www.bo.cnr.it/corsi-di-informatica/corsoCstandard/Lezioni/14Direttive.html

Secondo mio modesto parere si dovrebbe evitare l'uso delle #define per definire delle costanti ma utilizzare la parola chiave const.
Le #define sono ottime per passare al compilatore delle porzioni di codice da scegliere in base a determinate situazioni ma l'uso di const è IMHO più coerente e semanticamente corretto.

mi aggiungo anch'io..
define:è più da c,non è tipizzata se non lo fai te esplicitamente(e non è molto bello),non ha uno scope e alcuni debugger al posto di visualizzarti la costante,ti visualizzano direttamente il nome..
const: è nuovo e più da c++,risolve i problemi sopracitati,ma x esempio non sempre può essere usata come dimensione di un array globale..inoltre non puoi usarlo per cambiare il codice durante la compilazione..e di solito non puoi usarlo nei case degli switch..tutto ciò perchè const viene visto come una variabile,anche se poi spesso il compilatore la fa sparire..e in alcuni casi non lavora troppo bene coi template,penso..

si può discure se usare #define o una variabile di tipo const, ma ci sono situazioni in cui il #define non è sostituibile, per esempio nella compilazione condizionale, dove si definisce una "costante" mediante #define e si usa #ifdef per verificare se compilare o meno un pezzo di codice. Caso tipico: per evitare di avere conflitti negli #include dei file di tipo .h

IMHO la compilazione condizionale è il mestiere di #define. Le costanti è meglio definirle con const. Più controlli si hanno da parte del compilatore, meno probabili sono i bug :slight_smile:

tuxduino:
IMHO la compilazione condizionale è il mestiere di #define. Le costanti è meglio definirle con const. Più controlli si hanno da parte del compilatore, meno probabili sono i bug :slight_smile:

Approvo

leo72:

tuxduino:
IMHO la compilazione condizionale è il mestiere di #define. Le costanti è meglio definirle con const. Più controlli si hanno da parte del compilatore, meno probabili sono i bug :slight_smile:

Approvo

Sottoscrivo