Programar em C/Variáveis: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 147:
 
<div style="background-color: #ddffdd; padding: 10px; margin: 20px;">'''Nota:''' Você pode abreviar <tt>short int</tt> e <tt>long int</tt> para simplesmente <tt>short</tt> e <tt>long</tt>, respectivamente.</div>
 
 
==Especificadores de Classe de Armazenamento==
 
<b>auto:</b> O especificador de classe de armazenamento auto define variáveis automáticas, isto é, variáveis locais. Raramente usado pois todas as variáveis locais do C são auto por definição. <br>
<b>static:</b> O funcionamento das variáveis declaradas como static depende se estas são globais ou locais.
Variáveis globais static funcionam como variáveis globais dentro de um módulo, ou seja, são variáveis globais que não são conhecidas em outros modulos. Isto é util se quisermos isolar pedaços de um programa para evitar mudanças acidentais em variáveis globais.<br>
<b>Exemplo:</b>
 
<source lang="C">
 
 
#include <stdio.h>
void f(void)
{
static int i = 0; /* só sera inicializada a 0 na primeira chamada de f */
int j = 0; /* j sera inicializada a cada vez */;
i++;
j++;
printf("i vale %d e j vale %d.\n", i, j);
}
int main(void)
{
f();
f();
f();
return 0;
}
</source>
resultado da execução do código:
 
i vale 1 e j vale 1.
i vale 2 e j vale 1.
i vale 3 e j vale 1.
 
 
<b>extern</b> :Define variáveis que serão usadas em um arquivo apesar de terem sido declaradas em outro.Todas as variáveis e funções globais que não são definidas como static são extern por omissão.<br>
 
<b>register</b>:Essa classe indica que a variável deve ser estocada em um registro do processador.Isso permite um ganho de tempo comparado a variáveis estocada na memoria viva que sao executadas com menos rapidez.O numero de registros do processador é limitado então é inútil definir toda uma estrutura com a classe register.<br>
As variáveis estocadas dentro de um registro são obrigatoriamente local não podemos definir variáveis globais.
<source lang="C">
#include <stdio.h>
int main(void)
{
register short i, j;
for (i = 1; i < 1000; ++i)
{
for(j = 1; j < 1000; ++j)
{
printf("\n %d %d", i, j);
}
}
system("pause");
return 0;
}
</source>
 
<b>auto</b>: Essa classe é uma herança da linguagem B. Ela serve para indicar que as variáveis locais de uma função não são estáticas. Mas na linguagem C quando uma variável local não usa o especificador static é automatic essa palavra reservada é inútil .
 
== Literais ==