Bene, le variabili globali possono essere modificate da qualsiasi luogo.
Fondamentalmente, nel livello basso, una variabile viene archiviata nella memoria RAM e creata dopo l'avvio dell'applicazione, ha sempre un indirizzo nella RAM. Le definizioni sono solo macro, il compilatore sostituirà semplicemente i nomi di definizione con i relativi valori nel passo della compilazione.
#define
non può essere modificato, è solo un macro. E #define
non è solo di valori, è possibile definire quasi tutto ciò che si desidera, ad esempio:
// Defining a constant
#define PI 3.14
// Defining an expression
#define MIN(x,y) ((x)<(y))?(x):(y)
// Defining a piece of code
#define STOP_TIMER \
clock_gettime(CLOCK_REALTIME, &__t1); \
__lasttime = \
(double) (__t1.tv_sec - __t0.tv_sec) + \
(double) (__t1.tv_nsec - __t0.tv_nsec)/1000000000.0;
e, nella maggior parte delle situazioni, definisce vengono utilizzati per impostare alcuni valori specifici del sistema operativo o di specifici dell'hardware. È una cosa davvero potente, perché ti dà l'opportunità di cambiare le cose in modo dinamico nella fase di compilazione. Ad esempio:
// Example with OS
#ifdef __linux__
#define WELCOME_STRING "welcome to Linux!"
#else
#define WELCOME_STRING "welcome to Windows!"
#endif
// Example with hardware
#if __x86_64__ || __ppc64__
#define USING_64BIT
#else
#define USING_NOT64BIT
#endif
Le variabili globali sono accessibili e modificabili da qualsiasi luogo. Le costanti #define non possono essere modificate, basta leggere. Ha a che fare con la sicurezza delle filettature e il rientro delle funzioni. – shinzou
"* So cosa #define fa *" Sicuro? ;-) Tuttavia, leggere questo https://gcc.gnu.org/onlinedocs/cpp/ potrebbe aiutarti a ottenere l'illuminazione. – alk
Una variabile 'global' è una variabile, puoi cambiarne il valore a meno che tu non la renda un' const', '# define' sia un valore fisso. Non può essere cambiato affatto. –