Tópicos sobre variáveis

FIXME Conteúdo em preparação

Escopo

Por “escopo” de uma variável entende-se em que trechos do código ela pode ser acessada. Há basicamente dois escopos possíveis em C: local e global:

O trecho de código a seguir ilustra a declaração e uso de variáveis globais e locais:

FIXME achar código mais curto ou função mais simples

#include <stdio.h>
 
int teto ;  // variável global, pode ser acessada de qualquer lugar
 
int somaN (int n)  // variável local "n", só pode ser acessada dentro da função
{
  int soma = 0 ;    // idem, "soma"
 
  for (int i = 0; i < n; i++) // "i" só pode ser acessada dentro deste laço
  {
    int aux = soma + i ; // idem, "aux"
    if (aux < teto)
      soma = aux ;
  }
  return (soma) ;
}
 
int main ()
{
  int val = 10 ;  // variável local
  printf ("%d\n", somaN (val)) ;
}

Uma variável local pode ter o mesmo nome de uma variável global ou de uma variável local declarada em um bloco mais externo. Ao acessar uma variável, será buscada a definição feita no mesmo bloco, ou no bloco externo mais próximo, como mostra o exemplo a seguir:

#include <stdio.h>
 
int valor = 100 ;  // variável global
 
void func ()
{
  int valor = 5 ; // variável local
 
  printf ("2: %d\n", valor) ;
  {
    int valor = 17 ; // nova variável local, dentro do bloco
 
    printf ("3: %d\n", valor) ;
  }
  printf ("4: %d\n", valor) ;
}
 
int main ()
{
  printf ("1: %d\n", valor) ;
  func () ;
  printf ("5: %d\n", valor) ;
}

O resultado dessa execução é o seguinte (tente explicá-lo!):

1: 100
2: 5
3: 17
4: 5
5: 100

Por default, o escopo de uma variável global é limitado ao arquivo onde ela está definida. Todavia, em um projeto com vários arquivos, pode-se referenciar uma variável global definida em outro arquivo usando o modificador extern.

Por exemplo, supondo que arq1.c e arq2.c sejam arquivos de código-fonte do mesmo projeto, e que uma variável global seja definida no primeiro arquivo:

arq1.c
// aqui a variável é definida, alocada e inicializada
int default = 100 ;
 
...

Caso deseje-se acessar essa variável global em outro arquivo do mesmo projeto, basta declará-la como extern:

arq2.c
// aqui a variável é somente declarada
extern int default ;
 
...

A declaração extern acima pode ser entendida como “use a variável global inteira chamada default, que já foi declarada e alocada em outro arquivo deste projeto.

Alocação

FIXME Explicar auto, static, extern e register com exemplos

Constantes

FIXME Falar sobre const e #define

Outros modificadores