Capítulo 13: Typedef

Aluna: Eyre Brasil Montevecchi – Github

13.1. Definição

A palavra reservada typedef é utilizada para criar um alias ou “apelido” para tipos de dados na linguagem C e C++. Desta forma, tipos de dados podem ser organizados segundo a sua função e tipos com definições ou declarações de variáveis complexas e longas podem ter sua nomenclatura simplificada. Sua forma geral é:

typedef antigo_nome novo_nome;

Abaixo temos exemplos de sua utilização em programas C:

#define MAX 10

int main () {

    typedef int vetorIntTamMAX[MAX];
    typedef char novoChar;
    typedef int contador;
    typedef int *ponteiroInt;

    vetorIntTamMAX v1;
    novoChar c1;
    contador i, j;
    ponteiroInt p1;

  return 0;
}

No trecho de código acima, o nome vetorIntTamMAX é definido como um alias ou uma outra forma mais resumida de declarar um vetor de inteiros com tamanho igual ao valor definido para a constante MAX. Agora, no programa acima, quando quisermos declarar um vetor desse tipo, basta escrever:

vetorIntTamMAX v1;

O mesmo se aplica aos demais apelidos criados: para declarar os contadores inteiros do programa acima, podemos utilizar o alias contador, que representa as variáveis do tipo int:

contador i, j;

13.2 Indicando o significado em declarações de variáveis

O typedef pode ser utilizado para dar significados a variáveis, organizando o programa e indicando que essas não são compatíveis dentro do contexto do programa, embora sejam compatíveis para o compilador. Veja o exemplo abaixo, com uma declaração sem a utilização do typedef:

int velocidade_atual;
int maior_pontuacao;

void congratular(int sua_pontuacao) {
    if (sua_pontuacao > maior_pontuacao)
    ...
    }
}

Agora o veja a modificação abaixo, expressando o contexto específicos dos tipos declarados:

typedef int km_por_hora;
typedef int pontos;

km_por_hora velocidade_atual;  
pontos maior_pontuacao;       

void congratular (pontos sua_pontuacao) {
    if (sua_pontuacao > maior_pontuacao){
    ...
    }
}

Os dois trechos de código executam da mesma maneira, mas no segundo trecho, é mais clara a incompatibilidade entre as variáveis velocidade_atual e maior_pontuacao, embora sejam ambas do tipo int e comparáveis para o compilador, que não apontaria nenhum problema ao compilar o código abaixo, que está incorreto contextualmente e retornará resultados indesejados para o programa em questão:

velocidade_atual = 100;
maior_pontuacao = velocidade_atual;

Porém, o compilador não aceitará modificações através de prefixos para esses apelidos criados. O código abaixo por exemplo, geraria erro de compilação:

typedef int pontos;
unsigned pontos a;

13.3 Simplificando definições e declarações

Podemos também simplificar o nome de tipos mais complexos, como as estruturas de dados (struct). Veja o trecho de código abaixo:

struct minhaStruct {
    int dado1;
    char dado2;
};

Agora que a struct minhaStruct foi definida, para declarar variáveis desse tipo em C, a palavra chave struct é obrigatória:

struct minhaStruct a;

Podemos eliminar a utilização da palavra struct de duas formas. Acrescentando a palavra typedef à declaração como abaixo:

typedef minhaStruct minhaStructNova;
//declaração agora fica:
minhaStructNova a;

Ou combinando a definição e declaração de uma vez só:

typedef struct nomeDaMinhaStruct{
    int dado1;
    char dado2;
} ApelidoDaMinhaStruct;

ApelidoDaMinhaStruct a;

Suponha porém, que estamos criando uma estrutura chamada nodo. Esta estrutura terá um valor chave e ponteiros que pontam para uma estrutura nodo também. Teríamos que utilizar a seguinte declaração abaixo:

typedef struct nodo{
    int chave;
    struct nodo *prox;
    struct nodo *ante;
} Nodo;

Note que precisamos usar a palavra struct para declarar ponteiros para struct nodo, pois o apelido só é definido após o corpo da struct nodo. Para usarmos os ponteiros de forma mais simplificada, basta fazer como o exemplo abaixo:

typedef struct nodo Nodo;
struct Nodo{
    int chave;
    Nodo *prox;
    Nodo *ante;
};

13.4 Exercícios

Para treinar a utilização do typedef, acesse a lista de exercícios desse capítulo em Lista de exercícios.

13.5 Referências

Typedef. Wikipédia, 2017. Disponível em: <https://en.wikipedia.org/wiki/Typedef>. Acesso em: 10 nov. 2017.

ARAÚJO, Aldrovando Luís Azeredo. Curso de C da UFMG – Aula 11 – Tipos de dados definidos pelo Usuário: o comando typedef. CPDEE/UFMG, 1999. Disponível em: <http://mtm.ufsc.br/~azeredo/cursoC/aulas/cb60.html>. Acesso em: 10 nov. 2017.

results matching ""

    No results matching ""