Programação
 › Algoritmo  › C/C++  › Java
Web
 › HTML/XHTML  › JavaScript  › PHP
Sistema Operacional
 › Comandos de DOS  › Windows  › Linux  › Mac/BSD
Office
 › Word / Writer  › Excel / Calc
Áreas do Site
 › Download  › Fórum  › Blog
Recomendamos
Computadores e Informática em Lisboa
TI Expert » Programação » C/C++ » Variáveis Locais e Globais

Variáveis Globais e Locais

Agora que aprendemos como criar funções, uma nova concepção deve estar em mente: A diferença entre variáveis globais e locais.

Variáveis locais

Variáveis locais são aquelas nas quais apenas a função onde ela está pode usá-la. Por exemplo, se declaramos int x dentro da função main, apenas a função main poderá utilizá-la para guardar dados e nenhuma outra função poderá utilizar o int x da função main. Veja:

#include <iostream>
#include <cstdlib>
using namespace std;

int obterY (void) //criando a função
{
    int y; //apenas a função obterY pode utilizar
    y=10*5;
    return y;
}

int main (void){
    int valorDeY, x; // apenas a função MAIN pode utilizar
    cout <<"digite o valor de X: ";
    cin >> x;
    cin.ignore ();
    valorDeY=obterY();
    cout <<"\nX="<<x<<"\tY="<<valorDeY<<"\n\n";
    system ("pause");
} 

Perceba que a variável x só pode ser utilizado por main e a variável y só pode ser utilizada por obterY. Para conseguirmos utilizar o valor guardado em y na função obterY, tivemos que retornar (por na saída da função) o valor de y (return y) e guardamos dentro de outra variável que estava em main - valorDeY.

Variáveis globais

As variáveis globais são declaradas da mesma forma que uma variável local - primeiro o tipo, depois o nome da variável. Mas a diferença é que esta variável é declarada fora de qualquer função. Por convenção, geralmente, utilizamos um underline (_) no começo do nome da variável para facilitar a leitura do programa e facilmente percebermos de que se trata de uma variável global.

Variáveis globais podem ser utilizadas por qualquer função. E qualquer função pode alterar o valor, utilizá-la em um processo ou até mesmo atribuir o valor que quiser.

#include <iostream>
#include <cstdlib>
using namespace std;

int _iniciado=0; //variável global começa em 0

void start (void){
    _iniciado++;
}

int main (void){
    start (); //chamando a função start
    int x=0, opcao; // variáveis locais, apenas a função MAIN pode utilizar
    x++;
    cout <<"Este programa foi iniciado "<<_iniciado<<" vez(es)";
    cout <<"\nO valor de X e "<<x;
    cout <<"\n\nDeseja reiniciar o programa?\n1.\t\tSIM\nOutro numero\tNAO\n";
    cin >> opcao;
    cin.ignore ();
    if (opcao==1)
        main (); //reiniciar o programa
    return 0;
} 

Perceba que a variável _iniciado está sendo usada nas duas funções - main e start. Toda vez que a função start é chamada, é incrementado (somado) um a _iniciado. Prestemos atenção no seguinte também, dentro da função main também tem uma variável chamada x que toda vez que chamamos main deve ser incrementada (x++).

Então, por que apenas o valor de _iniciado muda e x continua sempre 1?

É aí que está a vantagem e também a desvantagem da variável global.

A variável global está constantemente na memória. O fato de reiniciar o programa ou não, pouco importa, porque o valor de _iniciado nunca é reinicializado quando chamamos uma função. A não ser que em algum lugar do programa nós especifiquemos isso.

Já as variáveis locais estão presas as funções. Cada vez que chamamos uma função, também chamamos as variáveis dentro da função. Se finalizamos uma função, também finalizamos a variável. Resumindo, se reiniciamos a função, também reiniciamos a variável daquela função.

A desvantagem da variável global é a dificuldade de lidar com ela. Devemos usar variáveis globais apenas quando realmente necessário.

Porque, imagine usar uma variável global e dentro de nosso programa tem 10 ou mais funções, todas elas utilizando a mesma variável global e alterando seu valor. Ao final de todas as operações, dificilmente saberemos qual será seu resultado. Ou seja, isso dificultará a lógica do nosso programa, deixando-o difícil de interpretar.

Creative Commons License
Autor: Denys William Xavier
Este artigo está sob Licença Creative Commons.

Faça o download da versão em PDF Indique nosso site Gostou?
Indique nosso site!
Este artigo foi
lido 51823 vezes
Bookmark e Compartilhe

Páginas Relacionadas

Enquete
O Google Chrome OS irá desbancar o Microsoft Windows 7?
» ProgramaçãoAlgorítmo | C/C++ | Java

» WebHTML/XHTML | JavaScript | PHP

» Sistema OperacionalComandos de DOS | Windows | Linux | Mac/BSD

» OfficeWord/Wirter | Excel/Calc

» Áreas do SiteDownloads | Fórum | Blog