Usando typedef para Aliases de Tipo
Parte da seção Logic & Flow do Journey de C da Coddy. Lição 58 de 63.
Às vezes, na programação C, você encontrará situações em que os nomes dos tipos de dados existentes são muito verbosos ou não expressam claramente a intenção do seu programa. A palavra-chave typedef fornece uma solução ao permitir que você crie novos nomes para tipos de dados existentes.
Pense no typedef como a criação de um apelido ou codinome para um tipo de dado. A sintaxe básica é direta:
typedef existing_type new_name;Por exemplo, você pode criar um nome mais descritivo para o tipo de dado int:
typedef int Integer;Após esta declaração, você pode usar Integer em qualquer lugar onde você normalmente usaria int. Ambos int count = 5; e Integer count = 5; realizam exatamente a mesma coisa, mas a segunda versão pode ser mais significativa em certos contextos.
Este recurso torna-se particularmente valioso ao trabalhar com tipos de dados complexos ou quando você deseja tornar seu código mais autodocumentado e mais fácil de manter.
Desafio
FácilCrie um programa em C que demonstre o uso de typedef para criar aliases de tipos significativos para um sistema de monitoramento de temperatura. Seu programa deve:
- Criar os seguintes aliases de tipo usando
typedef:- Criar um alias de tipo
Temperatureparafloat - Criar um alias de tipo
SensorIDparaint - Criar um alias de tipo
Statusparaint
- Criar um alias de tipo
- Na função principal:
- Declarar uma variável do tipo
SensorIDchamadasensor - Declarar uma variável do tipo
TemperaturechamadacurrentTemp - Declarar uma variável do tipo
Temperaturechamadathreshold - Declarar uma variável do tipo
StatuschamadaalertStatus - Ler quatro valores da entrada nesta ordem: ID do sensor, temperatura atual, temperatura de limite (threshold) e status de alerta
- Atribuir esses valores de entrada às variáveis correspondentes
- Imprimir as informações do sensor exatamente neste formato:
Sensor ID: [sensor_id]Current Temperature: [current_temp]Threshold: [threshold_temp]Alert Status: [alert_status]
- Realizar a análise de temperatura e imprimir os resultados:
- Calcular a diferença de temperatura (temperatura atual menos o limite) e armazená-la em uma variável
Temperaturechamadadifference - Imprimir a diferença exatamente neste formato:
Temperature Difference: [difference] - Determinar a categoria da temperatura com base na temperatura atual:
- Se a temperatura for inferior a 0.0: imprimir
Category: Freezing - Se a temperatura estiver entre 0.0 e 25.0 (inclusive): imprimir
Category: Normal - Se a temperatura for superior a 25.0: imprimir
Category: Hot
- Se a temperatura for inferior a 0.0: imprimir
- Verificar se um alerta deve ser disparado:
- Se a temperatura atual for maior que o limite E o status de alerta for 1: imprimir
Alert: Temperature exceeded threshold! - Caso contrário: imprimir
Alert: No alert triggered
- Se a temperatura atual for maior que o limite E o status de alerta for 1: imprimir
- Calcular a diferença de temperatura (temperatura atual menos o limite) e armazená-la em uma variável
- Declarar uma variável do tipo
Este desafio demonstra como o typedef torna o código mais autodocumentado e fácil de entender. Em vez de usar tipos genéricos como int e float em todo o seu programa, você usará nomes significativos como SensorID, Temperature e Status que indicam claramente o propósito de cada variável. Essa abordagem melhora a legibilidade do código e o torna mais fácil de manter e modificar seus programas.
Experimente você mesmo
#include <stdio.h>
// TODO: Crie aliases typedef aqui
int main() {
// TODO: Declare variáveis usando os aliases typedef
// Ler valores de entrada
scanf("%d", &sensor);
scanf("%f", ¤tTemp);
scanf("%f", &threshold);
scanf("%d", &alertStatus);
// TODO: Escreva seu código abaixo para imprimir informações do sensor e realizar a análise
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Logic & Flow
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres7Estruturas (structs)
O que é uma Struct?Declarando uma StructCriando Variáveis de StructAcessando Membros de uma StructInicializando StructsRecapitulação: Struct de Dados de Aluno10Enums e Typedef
enum para Constantes NomeadasDeclarando e Usando EnumsEnums em Instruções SwitchUsando typedef para Aliases de Tipotypedef com StructsRecapitulação: Prática de Typedef e Enum2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um ContatoPratique por conta própria: Compilador de C online