Assegnamento e define.
Buongiorno,
sto leggendo gli appunti inerenti ai fondamenti di C in particolare mi chiedo qual è la differenza nell'assegnare ad una costante un intero con la direttiva #define cioè qual è l'utilità di questo nuovo concetto ?
Io mi sono dato una mezza risposta cioè
con l'assegnamento posso appunto assegnare alla costane $i$ un valore o un espressione quindi nell'esecuzione il valore di $i$ può mutare invece con la direttiva #define questo non può avvenire cioè una volta assegnato il valore o espressione questo non cambia.
Giusto ?
sto leggendo gli appunti inerenti ai fondamenti di C in particolare mi chiedo qual è la differenza nell'assegnare ad una costante un intero con la direttiva #define cioè qual è l'utilità di questo nuovo concetto ?
Io mi sono dato una mezza risposta cioè
con l'assegnamento posso appunto assegnare alla costane $i$ un valore o un espressione quindi nell'esecuzione il valore di $i$ può mutare invece con la direttiva #define questo non può avvenire cioè una volta assegnato il valore o espressione questo non cambia.
Giusto ?
Risposte
Ciao, ti posto un paio di link:
https://stackoverflow.com/questions/644 ... 72#6442372
https://stackoverflow.com/questions/524 ... 45#5248645
Tra le varie cose si deduce anche che in C la dimensione di un array statico può essere "assegnata" con una macro, ma non con una "variabile costante".
https://stackoverflow.com/questions/644 ... 72#6442372
https://stackoverflow.com/questions/524 ... 45#5248645
Tra le varie cose si deduce anche che in C la dimensione di un array statico può essere "assegnata" con una macro, ma non con una "variabile costante".
Grazie mille era quello che cercavo


Nota che C e C++ hanno comportamenti diversi. Chi programma in C++ difficilmente usa i [inline]define[/inline] per definire valori costanti, specialmente dopo l'arrivo dei [inline]constexpr[/inline].
In genere io lo uso per fare cose come:
In C ci sono limitazioni come quella relativa alla dimensione degli array, quindi è più usata.
In genere io lo uso per fare cose come:
#define RETURN_ON_ERROR(func) \ do \ { \ ErrorType error = (func); \ if (error != NO_ERROR) \ return error; \ } while (0)
In C ci sono limitazioni come quella relativa alla dimensione degli array, quindi è più usata.