Definição de tipos

A palavra reservada typedef permite definir (ou redefinir) um tipo de dado. Ela pode ser aplicada a qualquer tipo da linguagem C, mas é particularmente útil com structs, pois simplifica a declaração de variáveis e parâmetros de tipo struct.

Forma geral:

typedef <tipo existente> <novo tipo> ;

Exemplo com escalares:

typedef unsigned long int uint32_t ; // "uint32_t" equivale a "unsigned long int"
 
 
uint32_t a, b ;  // aloca duas variáveis do tipo uint32_t

Exemplo com structs:

struct pac_t
{
  char  nome[100] ;
  short idade ;
  short quarto ;
} ;
 
typedef struct pac_t paciente_t ;  // struct pac_t -> paciente_t
 
// declaração e alocação
paciente_t pac1, pac2 ;

Ou redefinindo o próprio tipo paciente_t ;

struct paciente_t
{
  char  nome[100] ;
  short idade ;
  short quarto ;
} ;
 
typedef struct paciente_t paciente_t ;
 
// declaração e alocação
paciente_t pac1, pac2 ;

Ou ainda mais “enxuto”:

typedef struct paciente_t
{
  char  nome[100] ;
  short idade ;
  short quarto ;
} paciente_t ;
 
// declaração/alocação
paciente_t pac1, pac2 ;
O uso de typedef com structs é desaconselhado por alguns guias de estilo de código em C, por “esconder” o fato que um determinado tipo é uma struct, o que pode tornar mais difícil a leitura do código.