ok capito
dankissime![]()
ok capito
dankissime![]()
Se non fosse nato il c++, il mio intelletto sarebbe ancora oscuro a molti...
lo scope di una varibile globale è sempre un exe o una dll, per superare il problema che dici riguardo la compilazione la tecnica (standard) è questa:Originariamente inviato da Andrea Simonassi
No, una variabile (o funzione) globale static ha lo scope limitato al solo file sorgente in cui si trova. Questo secondo lo standard, se poi un compilatore si comporta diversamente, non è un compilatore standard.
mettere la variabile globale nel file A
const int a = 0;
nel file B invece si usa la extern
extern const int a;
poi si linkano assieme i due file ed essi vedono, e possono usare, la stessa variabile (naturalmente non è obbligatorio che sia const)
ciao
:adhone: :adhone: :adhone:
sòio mi !!!!!!!!!!!!!!
Uno dei segreti della felicità è la cattiva memoria
Infatti 'static' non ci va! Se dichiari una variabile globale 'static' all'interno di un modulo e poi inserisci il riferimento 'extern' in un altro modulo, beh, il linker non vedrà quella variabile, e proprio a causa di 'static'. Provare per credere.
Ciao.
Se vuoi definire una costante globale utilizzi:
#define NOMECONST value[F,L,D,...]
#define MAX 100L in questo caso 100 è un long
iloiacorb
VB5, vb6, Java, C/C++, SQL, ACCESS, ORACLE, ASP, AUTOCAD, DBCAD, winME, 9x, 2000, Assembly 8086, 8051
C'è una bella differenza fra simboli e costanti. Ho risposto su questo argomento in un topic di cui però non ricordo il titolo.Se vuoi ricerca fra i threads recenti, così ti chiarisci un po' le differenze.
Ciao.
per le costanti è meglio usare le variabili normali aggiungendo const così il compilatore fa il controllo dei tipiOriginariamente inviato da iloiacorb
Se vuoi definire una costante globale utilizzi:
#define NOMECONST value[F,L,D,...]
#define MAX 100L in questo caso 100 è un long
ciao
:adhone: :adhone: :adhone:
sòio mi !!!!!!!!!!!!!!
Uno dei segreti della felicità è la cattiva memoria
non capisco quello che dici usare static in una variabile globale è inutile non sbagliatoOriginariamente inviato da r0x
Infatti 'static' non ci va! Se dichiari una variabile globale 'static' all'interno di un modulo e poi inserisci il riferimento 'extern' in un altro modulo, beh, il linker non vedrà quella variabile, e proprio a causa di 'static'. Provare per credere.
Ciao.
io static la uso solo all'interno di classi, ma se volessi fare una varibile glabel static non capisco perchè il compilatore+linker me lo dovrebbero impedire?![]()
![]()
ciao
:adhone: :adhone: :adhone:
sòio mi !!!!!!!!!!!!!!
Uno dei segreti della felicità è la cattiva memoria
Te lo impedirebbero perchè tu hai esplicitamente dichiarato di non volere rendere tale variabile visibile a tutti usando la keyword static.Originariamente inviato da belele
non capisco quello che dici usare static in una variabile globale è inutile non sbagliato
io static la uso solo all'interno di classi, ma se volessi fare una varibile glabel static non capisco perchè il compilatore+linker me lo dovrebbero impedire?![]()
![]()
ciao
:adhone: :adhone: :adhone:
Se non vuoi avere impedimenti non usare 'static' nelle variabili globali, infatti per default il C/C++ non impedisce l'accesso a chiunque delle variabili globali.
Io non uso static per le variabili globali (lo uso solo sulle variabili di alcune classi)Originariamente inviato da Andrea Simonassi
Te lo impedirebbero perchè tu hai esplicitamente dichiarato di non volere rendere tale variabile visibile a tutti usando la keyword static.
Se non vuoi avere impedimenti non usare 'static' nelle variabili globali, infatti per default il C/C++ non impedisce l'accesso a chiunque delle variabili globali.
però non avevo mai sentito che static serva ad impedire l'accesso,
dove l'hai letto?![]()
per quello che sò static serve per non far morire la variabile alla fine dello scope
ciao
:adhone: :adhone: :adhone:
sòio mi !!!!!!!!!!!!!!
Uno dei segreti della felicità è la cattiva memoria
Allora ho capito che vuoi dire: se dichiari static una variabile all'interno di una funzione => serve a non far morire una variabile tra una chiamata e l'altra (quello che hai detto tu).
Se invece dichiari static una variabile globale => il suo scope è globale limitatamente al modulo in cui viene compilata.
Ma parlavamo di due cose diverse.