C++
Home

Classe de armazenamento e Regras de escopo

Váriaveis podem conter várias classes de armazenamento.
Que são:

auto, register, extern, mutable, static.

Esses tipos de classes de armazenamento servem para se criar variaveis globais e usa-las apropriadamente.
Cada tipo tem sua função definida.

Variáveis to tipo auto, são usadas somente no corpo de uma função

auto int cout = 1;


Variáveis locais static conservam seus valores quando a funcao é encerrada:

static int cout = 1;

De todas a mais importante para estudarmos é a static. Pelos tutoriais veremos vários programas com classes de armazenamento e aos poucos vamos nos acostumando a usa-los


Exemplo usando uma regra de escopo:

#include <iostream>
using std::cout;
using std::endl;

// variavel global
int numero = 10;

int funcao1 ( void ); //prototipo de funcao sem parametros

int main()
{

   int numero = 20; // variavel local de main

   cout << "A variavel local de main e "
          << numero
          << endl;

   // abrindo novo escopo
   {
      int numero = 30; // variavel interna de main
      cout << "A variavel interna e diferente da local: "
             << numero
             << endl;
   }

   cout << "As variaveis de main sao diferentes das variaveis globais, "
          << "Porem tem o mesmo nome"
          << endl;

   cout << "Variavel global: "
          << funcao1()
          << endl;

   std::cin;

   return 0;
}

int funcao1 ()
{

   return numero; // como nao foi iniciado uma variavel local, usa a global
}

Teste este programa e observe o resultado.


Exemplo complexo usando escopo, static e global:

// exemplo com static
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

void a ( void );
void b ( void );
void c ( void );

int x = 1; // variavel global

int main()
{
   int x = 5; // variavel local

   cout << " x local eh " << x << endl;

   {
      int x = 9; // variavel escopo

      cout << " x no escopo INTERNO de main " << x << endl;
   }

   cout << " x local continua " << x << endl;

   a(); // a tem x local automatico
   b(); // b tem x local estatico
   c(); // c usa x global
   a(); // a reinicializa x local automatico
   b(); // x local estatico conserva seu valor anterior
   c(); // x global tambem conserva seu valor

   cout << " x local em main eh " << x << endl;

   return 0;
}

void a ( void )
{
   int x = 25; // inicializa sempre que chama a funcao

   cout << endl << " x local em a eh " << x;

   ++ x;

   cout << " x local em a eh "<< x << " antes de sair " << endl;

}

void b ( void )
{
   static int x = 50; // somente inicializa estatica na primeira vez

   cout << endl << "x local estatico em b e " << x;

   ++x;

   cout << "x local estatico eh " << x << " e ao sair "<< x << endl;
}

void c ( void )
{
   cout << endl << "x global eh " << x << endl;

   x *= 10;

   cout << "x global eh " << x << " ao sair de c " << endl;
}

Leia atentamente, modifique, verifique e aprenda!

Perguntas??? Email