Parliamo di
definizione di 'struct' globalmente, come nuovo tipo di dato, o di
dichiarazione di una variabile globale (ad un nuovo tipo di dato) 'struct' ?
Una "struct" definisce un nuovo tipo di dato (definito dall'utente), e tale nuovo tipo di dato puo' essere definito sia globalmente che localmente. (a vari livelli: di file, di class o struct, di funzione, etc... anche se e' una valutazione prettamente formale e concerne se limitare o meno l'utilizzo di quel nuovo tipo di dato solo a una parte del codice)
Poi questo nuovo tipo di dato puo' essere usato alla stregua di uno dei tipi predefiniti (int, float, etc) per la dichiarazione delle variabili... ed esse possono essere a loro volta sia locali che globali.
C++:
struct myGlobalStruct {
int a;
float b;
}; // nuovo tipo di dato... globale
myGlobalStruct global_global; //dichiarazione di variabile globale
int main()
{
struct myLocalStruct {
int c;
float d;
}; // nuovo tipo di dato... locale, non accessibile fuori dal main
myGlobalStruct global_local; //dichiarazione di variabile locale
myLocalStruct local_local; //dichiarazione di variabile locale
}
Definire una 'struct' globalmente ( myGlobalStruct ) o localmente ( myLocalStruct ) ha solo come obiettivo di rendere disponibile (al programmatoire) il nuovo tipo di dato, ristretto esclusivamente al campo di visibilita' che viene deciso.
Nel senso che la dichiarazione delle variabili
myGlobalStruct global_local e
myLocalStruct local_local e' sostanzialmente identica: entrambe vengono allocate sullo stack, come le variabili locali, indipendentemente che la definizione del nuovo tipo di dato 'struct' sia globale o locale.
Per cio' che riguarda la dichiarazione della variabile "globale"
myGlobalStruct global_global segue le stesse "regole" di un qualsiasi altro tipo di dati (char, int, float, etc.), dichiarato globalmente.
Se ci fosse ancora qualche dubbio: ovviamente le variabili membro, all'interno della struttura, seguono l'andamento di dove (locale o globale) e'
dichiarata la variabile del nuovo tipo di dato 'struct''... non di dove viene
definita la 'struct'
P.S.
Il codice precedente e' in C++.
Se usassimo il C bisogna esplicitare
struct prima della dichiarazione della variabile:
C:
struct myGlobalStruct global_local; //dichiarazione di variabile locale
struct myLocalStruct local_local; //dichiarazione di variabile locale