Quale sarebbe la differenza tra dire questo?Differenza tra #Define e Float?
#define NUMBER 10
e
float number = 10;
In quali circostanze dovrei usare uno sopra l'altro?
Quale sarebbe la differenza tra dire questo?Differenza tra #Define e Float?
#define NUMBER 10
e
float number = 10;
In quali circostanze dovrei usare uno sopra l'altro?
#define NUMBER 10
Crea una sostituzione di stringa che verrà eseguita dal preprocessore (ad esempio durante la compilazione).
float number = 10;
Crea un float nel segmento di dati del file binario e lo inizializza a 10. I.e. avrà un indirizzo e sarà mutabile.
Così la scrittura
float a = NUMBER;
sarà lo stesso che scrivere
float a = 10;
mentre lo scrivere
float a = number;
creerà una memoria ad accesso.
"#Define" è in realtà una macro preprocessore che viene eseguito prima dell'avvio del programma ed è valida per l'intero programma
Float è un tipo di dati definito all'interno di un programma/blocco ed è valido solo all'interno del programma/bloccare.
"prima dell'avvio del programma" significa prima che venga compilato. –
Come dice Philipp, il modulo #define
crea una sostituzione nel codice in fase di pre-elaborazione, prima della compilazione. Poiché lo #define
non è una variabile come number
, la tua definizione è inficiata nel tuo eseguibile in fase di compilazione. Ciò è auspicabile se la cosa che si ripresenta è una vera e propria costante che non ha bisogno di calcolare o leggere da qualche parte in fase di esecuzione e che non cambia durante il runtime.
#defines
sono molto utili per rendere il codice più leggibile. Supponiamo che stavi facendo calcoli fisici - e non solo plonking 0.98f nel codice ovunque è necessario utilizzare la costante accelerazione di gravità, è possibile definire in un solo posto e aumenta la leggibilità del codice:
#define GRAV_CONSTANT 0.98f
...
float finalVelocity = beginVelocity + GRAV_CONSTANT * time;
EDIT Sorpreso di tornare e trovare la mia risposta e vedere non ho menzionato il motivo per cui non si dovrebbe usare #define
.
In genere, si desidera evitare #define
e utilizzare le costanti che sono tipi effettivi, perché #define
s non hanno scope ei tipi sono utili sia per i file IDE che per i compilatori.
Vedi anche questa domanda e risposta accettata: What is the best way to create constants in Objective-C
Va inoltre notato che mettere 'galleggiare a = 10;' (o altro) all'interno di un file di intestazione porteranno probabilmente a duplicare gli errori di simboli durante il collegamento. Tuttavia, l'uso di un '# define' non lo farà. – trojanfoe