Introducción¶
En C, el mecanismo nativo para crear nombres alternativos o alias de tipos
de datos es la palabra clave typedef. A diferencia de lo que ocurre en otros
lenguajes, typedef no introduce un nuevo tipo de dato físicamente diferente
para el compilador; simplemente asocia un identificador secundario a un tipo
existente (primitivo, puntero, estructura o enumeración) para simplificar la
escritura o mejorar la abstracción conceptual del código.
Desarrollo¶
Alias de Tipos con typedef¶
La declaración se asemeja a la de una variable estándar, pero precedida por
typedef:
typedef tipo_existente nuevo_nombre_t;Por ejemplo, si necesitás trabajar con enteros que representen distancias en metros y querés que el código exprese con claridad esa unidad:
typedef double metros_t;
// Ahora podés usar 'metros_t' como un tipo estándar
metros_t distancia_casa = 1500.50;
metros_t altura_edificio = 45.2;Físicamente, distancia_casa es un double. El compilador simplemente
reemplazará sintácticamente metros_t por double durante el análisis
semántico.
Abstracción de Plataforma¶
Uno de los usos más rigurosos de typedef es garantizar la portabilidad e
independencia del hardware. Tipos de datos como int o long pueden variar su
tamaño en bytes dependiendo de la arquitectura de la CPU (16, 32 o 64 bits).
Mediante typedef, se pueden definir alias que denoten explícitamente el ancho
físico del tipo de dato, facilitando la compilación del mismo código en
múltiples plataformas:
// Definiciones basadas en la arquitectura del compilador
typedef signed char entero8_t;
typedef short int entero16_t;
typedef int entero32_t;
typedef long long int entero64_t;(Nota: En el C estándar moderno, estas definiciones ya se encuentran
normalizadas en la cabecera estándar <stdint.h> mediante los tipos int8_t,
int16_t, int32_t e int64_t).
Regla de Estilo de la Cátedra: El sufijo _t¶
Para mantener la claridad y coherencia en el código desarrollado, la cátedra
impone la regla Regla 0x3004h: Utilizá typedef para definir tipos de estructuras con el sufijo _t, la cual establece que todo alias de tipo
creado mediante typedef debe finalizar de forma obligatoria con el sufijo
_t (por ejemplo, metros_t, velocidad_t, nodo_t). Esto permite
distinguir instantáneamente los tipos personalizados de las variables y
constantes en cualquier bloque de código.
A lo largo de este apunte le iremos dando uso a este concepto de manera gradual, particularmente para simplificar la declaración de estructuras complejas (Bloque 3) y la definición de Tipos de Datos Abstractos (Bloque 4).
Enumeraciones en C¶
Las enumeraciones (enum) se utilizan para representar conjuntos finitos y
discretos de constantes enteras nombradas.
Para un análisis detallado de la sintaxis de enumerativos, la asignación de valores, las colisiones en espacios de nombres y las validaciones de rango con switch defensivo, consultá el capítulo específico de Introducción.
Ejercicios de Autoevaluación¶
Solution to Exercise 1
1 2 3 4 5 6 7 8 9 10 11 12 13#include <stdio.h> // Definición de alias con el sufijo _t obligatorio typedef double distancia_t; typedef double tiempo_t; typedef double velocidad_t; velocidad_t calcular_velocidad(distancia_t d, tiempo_t t) { if (t <= 0.0) { return 0.0; } return d / t; }
Solution to Exercise 2
typedef unsigned char u8_t;
typedef unsigned short u16_t;
typedef unsigned int u32_t;Estas declaraciones garantizan la portabilidad porque si el código se porta a un
microcontrolador donde int ocupa 16 bits, solo es necesario redefinir el alias
u32_t a unsigned long en un único archivo centralizado, sin alterar las
declaraciones de variables a lo largo de todo el proyecto.
Solution to Exercise 3
No define un nuevo tipo de dato físicamente diferente.
typedef introduce únicamente un sinónimo o alias sintáctico en la tabla de
símbolos del compilador. Físicamente, el compilador trata a las variables
real_t como variables de tipo float estándar. Por lo tanto, realizar la
asignación directa entre variables de ambos tipos es totalmente válido y no
requiere ningún moldeo de tipo (cast), ya que no existe incompatibilidad
alguna.
Glosario¶
- Alias de tipo (typedef)
- Nombre alternativo asignado a un tipo de dato existente para mejorar la legibilidad y abstracción.
- Portabilidad
- Capacidad de un código para compilar y ejecutarse correctamente en diferentes arquitecturas de CPU sin cambios mayores.
Síntesis y Resumen¶
La directiva typedef se emplea para crear alias de tipos en C sin generar
nuevos tipos físicos. Su uso facilita la abstracción y la portabilidad del
código entre arquitecturas con diferentes tamaños de datos. Por normas de la
cátedra, todo alias definido con typedef debe utilizar obligatoriamente el
sufijo _t.
Referencias y Lecturas Complementarias¶
Kernighan & Ritchie (2014). Capítulo 5: Pointers and Arrays y Capítulo 6: Structures (sección
typedef).King (2008). Capítulo 14: The Preprocessor (secciones de tipos).
- Kernighan, B. W., & Ritchie, D. M. (2014). C Programming Language, 2nd Edition.
- King, K. N. (2008). C Programming: A Modern Approach (2nd ed.). W. W. Norton & Company.