segunda-feira, 26 de agosto de 2013

Classes de Armazenamento em C



Classes de Armazenamento

Introdução


Todas as variáveis em C têm dois atributos: um tipo e uma classe de armazenamento. Os tipos nós já conhecemos, e as classe de armazenamento que veremos serão as seguintes:
auto
extern
static
register

Classe auto

A maioria das variáveis que declaramos até agora estão confinadas nas funções que as usam. Isto é, são “visíveis” somente às funções onde estão declaradas. Tais variáveis são chamadas “locais” ou “automáticas”, são criadas quando a função é chamada e destruídas quando a função termina a sua execução. As variáveis declaradas dentro de uma função são automáticas por “default”. Variáveis automáticas são as mais comuns dentre as quatro classes. A classe de variáveis automáticas pode ser explicitada usando-se a palavra auto.

void main()
{
    auto int n;
}

É EQUIVALENTE A

void main()
{
    int n;
}


Classe extern
 
Todas as variáveis declaradas fora de qualquer função têm a classe de armazenamento extern. Variáveis com este tipo de atributo serão conhecidas por todas as funções declaradas depois dela. A declaração de variáveis externas é feita da mesma maneira como declaramos variáveis dentro do bloco de uma função.

#include <stdio.h>
#include <conio.h>

int n=10;

void main()
{
    extern n;
    printf("%d",n);
    getch();
}


Classe extern
 
A palavra extern indica que a função usará uma variável externa. Este tipo de declaração, entretanto, não é obrigatória se a definição original ocorre no mesmo arquivo fonte. Lembre-se que variáveis externas retém seus valores durante toda a execução do programa.

Classe static

Variáveis static de um lado se assemelham às automáticas, pois são conhecidas somente as funções que as declaram e de outro lado se assemelham às externas pois mantém seus valores mesmo quando a função termina. Usa-se variáveis declaradas como static normalmente para permitir que variáveis locais guardem seus valores mesmo após o término da execução do bloco onde são declaradas.

void soma();

void main()
{
    soma();
    soma();
    soma();
    getch();
}

void soma()
{
    static int i=0;
    i++;
    printf("i = %d \n",i);
}


Classe register

A classe de armazenamento register indica que a variável associada deve ser guardada fisicamente numa memória de acesso chamada registrador. Um registrador da máquina é um espaço onde podemos armazenar um int ou um char. Cada máquina oferece um certo número de registradores que podem ser manuseados pelos usuários. Basicamente variáveis register são usadas para aumentar a velocidade de processamento. Fortes candidatas a este tratamento são as variáveis de laços.
Segue a seguir um exemplo:

#include <time.h>

void main()
{
    int i, j;
    register int m,n;
    long t;

    t = time(0);
    for(j=0;j<=10000;j++)
        for(i=0;i<=10000;i++)
            ;
    printf("Tempo = %ld\n",time(0)-t);

    t = time(0);
    for(m=0;m<=10000;m++)
        for(n=0;n<=10000;n++)
            ;
    printf("Tempo = %ld\n",time(0)-t);
    getch();
}



0 comentários:

Postar um comentário

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Buy Coupons