PDA

Visualizza la versione completa : [C++] Variabile globale e locale


drinu
26-10-2006, 20:42
ciao a tutti ho incontrato una differenza tra la guida di programmazione "c++ guida completa di apoogeo" e la pratica con il compilatore "dev c++" riguardo le variabili globali e le variabili locali, ho scritto questo codice per farvi capire:

#include <iostream>
using namespace std;

void funzione();

int main() {
int globale=10;
cout<<"variabile globale in main="<<globale;
cout<<"\n";

funzione();

system("pause");
return 0;
}

void funzione() {
int locale=20;
cout<<"variabile locale="<<locale;
cout<<"\n";
cout<<"variabile globale in funzione="<<globale; //in questa riga mi da errore
}

l'errore 'variabile non dichiarata' e questo in conflitto con la guida che dice che la variabile "globale" utilizzabile nelle funzioni e in tutti i blocchi ({....}). questa infatti una caratteristica che farebbe al caso mio.

grazie
ciao

oregon
26-10-2006, 20:45
Hai dichiarato la variabile all'interno della main, quindi, in realta', e' locale alla main.

Per essere globale deve stare fuori dalla main, ovvero prima della dichiarazione della funzione main.

drinu
26-10-2006, 21:04
hai ragione e corrisponde alla guida eppure a cena ho bevuto acqua :master:

scusate se ho aperto una nuova discussione per una svista

grazie
buona serata

andbin
26-10-2006, 21:05
Originariamente inviato da drinu
ciao a tutti ho incontrato una differenza tra la guida di programmazione "c++ guida completa di apoogeo" e la pratica con il compilatore "dev c++" riguardo le variabili globali e le variabili locali, ho scritto questo codice per farvi capire:Variabile globale:
- Dichiarata al di fuori di ogni funzione.
- allocata in modo fisso per tutta la durata del programma in un'area dati.
- "visibile" potenzialmente a tutte le funzioni (dipende da dove e come dichiarata).

Variabile locale:
- Dichiarata dentro una funzione o anche, come caso particolare, dentro un blocco { }.
- allocata sullo stack.
- "visibile" solo all'interno della funzione o del blocco in cui dichiarata.

In C/C++ c' poi un caso particolare: una variabile locale dichiarata static visibile solo dentro la funzione ma ha durata fissa (come per le variabili globali).

drinu
27-10-2006, 18:23
grazie andbin

ciao

percky
04-11-2006, 18:07
scusate se mi intrometto, ho un problema molto simile, un programma di esemprio
preso tra l'altro da un libro mi da problemi simili. Ecco il programma:

#include <iostream>
using namespace std;

void func1();
void func2();

int count=0;

int main(){
int i;
for(i=0; i<10; i++) {
count=i*2;
func1();
}
system("pause");
return 0;
}

void func1()
{
cout<<"count: "<<count;
cout<<'\n';
func2();
}

void func2()
{
int count;
for(count=0; count<3; count++)
cout<<'.';
}


In pratica mi dice che non riconosce la variabile "count" all'istruzione "count=i*2;" inquanto secondo il compilatore non dichiarata.
In effetti non lo nel main, ma stata dichiarata prima come variabile globale.
Tralaltro quando vado ad eseguire il programma di drinu nella sua versione corretta non ho problemi di questo tipo. Da cosa potrebbe dipendere?

Grazie.

oregon
04-11-2006, 18:11
Cosi' com'e' il programma viene regolarmente compilato ...

percky
04-11-2006, 18:45
non da me, nel senso che ho provato con dev-c++5 e mi dice 12

'count' undeclared (first use this function)

anche se devo dire la verit con la versione 4 funziona, pensi dipenda dal compilatore? eppure se ci fosse un problema con la dichiarazione delle variabili globali non funzionerebbe neanche l'altro programma che invece gira correttamente.

oregon
04-11-2006, 18:48
Non so che dirti ... secondo me e' il compilatore ... (mi pare che la 5 sia ancora beta ...).

Comunque potrebbe dipendere dal fatto che hai usato nell'ultima funzione una variabile locale con lo stesso nome ... prova a cambiarlo ...

Se fossi in te, non userei la versione 5 ...

percky
04-11-2006, 18:54
la variabile duplicata voluta proprio dall'esempio, per capirne la differenza. ma che tu sappia esiste la versione italiana della 4.0?
in ogni caso grazie.

Loading