|
Desenvolupament de la pràctica
Creeu un nou arxiu del tipus C++ anomenat
m2p09.cc i escriviu el següent codi:
//m2p09.cc
-
Variables locals i globals -
#include <stdio.h>
void funcio(int);
int ga; //variable global no inicialitzada
int gb=2; //variable global inicialitzada
int g=5; //variable global inicialitzada
int main(){
int la; //variable local no inicialitzada
int lb=2; //variable local inicialitzada
int g; //variable local (amb el mateix nom
//que una variable global
g=10;
printf("valor de la variable global ga: %d\n",ga);
printf("valor de la variable global gb: %d\n",gb);
printf("valor de la variable local la: %d\n",la);
printf("valor de la variable local lb: %d\n",lb);
printf("valor de la variable local g: %d\n",g);
printf("valor de la variable global g: %d\n",::g);
funcio(lb); //crida a una funció
printf("valor de la variable local la: %d\n",la);
printf("valor de la variable local g: %d\n",g);
printf("valor de la variable global g: %d\n",::g);
return 0;
}
void funcio(int a){
int lc; //variable local
int g; //variable local amb el mateix nom
//que una global i que altra local
int la; //variable local amb el mateix nom que
//altre local de la funció main
lc=14;g=15;la=16;
printf("\n\n\n");
printf("FUN:valor de la variable local lc: %d\n",lc);
printf("FUN:valor del paràmetre formal a: %d\n",a);
printf("FUN:valor de la variable local g: %d\n",g);
printf("FUN:valor de la variable global g: %d\n",::g);
printf("FUN:valor de la variable local la: %d\n",la);
printf("\n\n\n");
} Captura de l'execució del programa.
 |
Explicació del programa
Aquest programa conté una funció anomenada funcio().
La seva declaració es fa al començament i conté els tipus de la funció i
del seu argument:
La funció és del tipus void,
això vol dir que no retornarà cap valor. Una crida a aquesta funció només
executarà les sentències de la seva definició entre les quals hi ha
sentències d'assignació a variables globals. La
definició de la funció és la següent:
void funcio(int a){
int lc;
//variable local única
int g;
//variable local amb el mateix nom
//que una global i que altra local
int la;
//variable local amb el mateix nom que
//altre local
lc=14;g=15;la=16;
printf("\n\n\n");
printf("FUN:valor de la variable local lc: %d\n",lc);
printf("FUN:valor del paràmetre
formal a: %d\n",a);
printf("FUN:valor de la variable local g:
%d\n",g);
printf("FUN:valor de la variable global g: %d\n",::g);
printf("FUN:valor de la variable local la: %d\n",la);
printf("\n\n\n");
} |
a és el nom del seu
paràmetre formal i és del tipus int. A més d'aquest paràmetre formal,
la funció defineix tres variables locals més: lc, g, i la.
Després de la sentència d'assignació:
les variables contindran aquests valors. Les
sentències printf() imprimiran els següents valors: lc
-> 14
a->2 (ja que la crida a la funció es fa amb funcio(lb) i el
valor de lb era 2. Aquest valor 2 és assignat a la variable local a.)
g->15 (encara que g tingui el valor 5 com a variable global i el valor 10
com a variable local de la funció main())
::g->5 (l'operador :: és propi del llenguatge C++ i s'anomena resolució
d'àmbit. Permet recuperar una variable global que ha estat ocultada per una
variable local amb el mateix nom)
la->16 (el valor assignat dintre de la funció. Aquesta assignació no
ultrapassa l'àmbit de la funció) Una
vegada executada la funció funcio() el programa retorna a la funció que
l'ha cridat, en aquest cas a la funció main(). Una nova sentència amb
la funció printf() ens demostra que l'assignació de la variable la no
s'ha conservat. El valor de la variable la és un valor sense sentit ja
que les variables locals que no s'inicialitzen contenen valors aleatoris. En
el programa es pot comprovar que les inicialitzacions de les variables globals i
locals es poden fer en el mateix moment de la seva declaració. Si una variable
global no és inicialitzada s'inicialitza automàticament a 0. Al contrari, si
una variable local no és inicialitzada, conté inicialment un valor arbitrari.
El compilador ens avisa si s'utilitza una variable local que no ha estat
inicialitzada.
|