2011-03-05 15 views

risposta

13
#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.

+0

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

0

"#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.

+1

"prima dell'avvio del programma" significa prima che venga compilato. –

4

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