Você está na página 1de 3

typedef: Como 'declarar' seus prprios tipos

Nos artigos passados, alm de aprendermos como declarar uma struct na linguagem C,
aprendemos aacessar e alterar os dados de uma estrutura.
Atravs de exemplos, vimos que podemos declarar vrias variveis de uma struct previamente
declarada:
struct Aluno joaozinho;
struct Funcionario secretaria;
como se tivssemos criados tipos novos.
Assim como o 'int', 'float' ou 'char', como se existisse o tipo 'struct Aluno' e 'struct Funcionario'.
Vamos entrar mais a fundo nesses detalhes e aprender como declarar structs atravs do atalho
typedef.

O que typedef
A palavra reservada typedef nada mais do que um atalho em C para que possamos nos
referir a um determinado tipo existente com nomes sinnimos.
Por exemplo, com o typedef, em vez de termos que nos referir como 'struct Aluno', poderamos
usar somente 'Aluno' para criar structs daquele tipo.
Em vez de escrever sempre 'struct Funcionario', poderamos escrever apenas 'Funcionario' e
ento declarar vrias structs do tipo 'Funcionario'.
Embora possamos criar atalhos com typedef para outros tipos, o typedef comumente usado
com structs.

Como declarar tipos com typedef


A sintaxe do typedef bem simples:
typedef tipo_existente nome_que_voce_escolheu;
Onde 'tipo_existente' um tipo j existente, como 'int' ou 'char'.
Agora, podemos passar a nos referir ao tipo 'tipo_existente' com outro nome, como
'nome_que_voce_escolheu'.
Exemplos de uso do typedef:
typedef int meuInteiro;
typedef char* String;
typedef unsigned short int idade;
Por exemplo, um aplicativo que cria atalhos para inteiro e ponteiro de char (vetor de
caracteres):

#include <stdio.h>
int main(void)
{
typedef int meuInteiro;
typedef char String[20];
meuInteiro numero = 1;

String nome;
scanf("%[^\n]s", nome);
printf("A variavel do tipo 'meuInteiro' eh um int e vale
%d\n", numero);
printf("Ja a variavel 'nome' eh uma String e
armazena \"%s\"\n", nome);
return 0;
}

Como usar typedef para structs


Como j havamos dito no comeo desse tutorial, o uso do atalho typedef bem comum com
structs, e a sintaxe anloga ao que j foi apresentado, com alguns detalhes especiais que
vamos explicar.
Quando formos usar o typedef com estruturas, no podemos declarar variveis aps o ponto-evrgula.
Colocamos apenas a palavra sinnima que vamos usar:
typedef struct Alunos
{
//cdigo da
//struct
} Aluno;
Pronto, agora podemos fazer algo do tipo:
Aluno joao, maria;
Esse cdigo faz com que possamos chamar "struct Alunos" apenas por 'Aluno'.
Note que 'Aluno' no uma varivel do tipo struct, apenas um atalho, uma maneira mais
simples de dizer 'struct Alunos'.
Outro exemplo de sintaxe de typedef com estruturas a seguinte, onde no precisamos criar o
nome da struct, apenas do sinnimo:
typedef struct
{
//cdigo da
//struct
} Alunos;
Agora a podemos definir structs desse tipo apenas usando a palavra 'Alunos'.
Como exemplo do uso do typedef para deixar mais fcil a declarao de structs e outros tipos,
vamos refazer o exemplo anterior com os conhecimentos aprendidos nesse tutorial de C.
Exemplo: Como declarar, preencher e acessar elementos de uma struct em C
Defina uma struct para tratar de alunos. Dentro dessa struct, crie uma varivel para armazenar
o nome do aluno, e outras para armazenar as notas de Matemtica, Fsica e a mdia dessas
duas notas.
Aps definir a struct, crie trs variveis do tipo struct que voc criou.
Preencha os nomes e notas dos alunos, calculando automaticamente a mdia deles.
Depois exiba tudo isso.

#include <stdio.h>
#define DIM 5

// Curso C Progressivo: www.cprogressivo.net


// Curso online e gratuito de C.
// Artigos, tutoriais e aulas sobre a linguagem C
int main(void)
{
typedef struct
{
char nome[30];
float matematica, fisica, media;
}Alunos;
Alunos alunos[DIM];
int count;
for(count = 0 ; count < DIM ; count++)
{
fflush(stdin);
__fpurge(stdin);
printf("\nNome do aluno %d: ", count+1);
gets(alunos[count].nome);
printf("Nota de matematica: ");
scanf("%f", &alunos[count].matematica);
printf("Nota de fisica: ");
scanf("%f", &alunos[count].fisica);
alunos[count].media = (alunos[count].matematica +
alunos[count].fisica)/2;
}
printf("\nExibindo nomes e medias:\n");
for(count = 0 ; count < DIM ; count++)
{
printf("nAluno %d\n", count+1);
printf("Nome: %s\n",alunos[count].nome);
printf("Media: %.2f\n", alunos[count].media);
}
return 0;
}

Você também pode gostar