La diferencia entre struct y typedef struct.

Estructuras en C/C++: De la Sintaxis Básica a la Arquitectura de Datos

En el desarrollo de software embebido y sistemas críticos, la organización de la memoria es fundamental. En lenguaje C y C++, una estructura (struct) es un tipo de dato que te permite combinar diferentes variables de tipos distintos en una sola entidad lógica. Por ejemplo, puedes tener una estructura llamada «Punto» que almacene las coordenadas x e y.

 

La definición estándar (lo que todos enseñan):

struct Punto { int x; int y; };

Luego, para usar esta estructura y declarar variables de tipo «Punto», normalmente deberías hacerlo así:

struct Punto miPunto; miPunto.x = 10; miPunto.y = 5;

La palabra clave struct debe ir antes del nombre de la estructura cada vez que declares una variable. Esto, en código moderno, genera ruido visual y verbosidad innecesaria.

La evolución: Typedef y Abstracción

Sin embargo, si usas «typedef struct», puedes crear un nuevo nombre para esta estructura. Esto te permite omitir la palabra clave struct al declarar variables de esa estructura, limpiando el código y acercándolo a una semántica de tipos de alto nivel.

Ejemplo con «typedef struct»:

typedef struct { int x; int y; } Punto;

Ahora la instanciación es directa y limpia:

Punto miPunto; miPunto.x = 7; miPunto.y = 3;

La diferencia entre «struct» y «typedef struct» es cómo declaras variables de ese tipo de estructura. Con «typedef struct», puedes crear un alias para la estructura y usar ese alias directamente sin necesidad de escribir la palabra struct.

¿Por qué importa esto en tu Arquitectura?

Aquí es donde dejamos de picar código y empezamos a diseñar sistemas. Aunque el resultado funcional parece el mismo, la elección tiene implicaciones estratégicas dependiendo de tu entorno (C puro vs C++):

  • En C (Puro): El uso de typedef es casi obligatorio para mantener un código legible y profesional. Sin él, estás obligado a arrastrar la palabra struct por todo tu código, lo cual ensucia la lectura de las firmas de tus funciones.
  • En C++ (Arduino/ESP32): Aquí está el error común. En C++, struct Punto define automáticamente el tipo Punto. El typedef es redundante en C++. Si estás programando en Arduino (que es C++), usar typedef struct suele ser una «muletilla» heredada de programadores de C de la vieja escuela.
  • Ocultación de Información (Opaque Pointers): Si estás diseñando una librería (para un cliente o para compartir), el typedef es tu mejor aliado para crear «Tipos Opacos». Puedes declarar typedef struct Config Config; en el archivo de cabecera (.h) sin revelar los detalles internos de la estructura, forzando al usuario a interactuar solo a través de tu API pública. Eso es arquitectura sólida.

Proyectos:

guest
1 Comentario
El más antiguo
El más nuevo Más votado
Opiniones integradas
Ver todos los comentarios
Roger
Roger
16 días hace

Me parece un artículo útil si estás empezando con C/C++ en Arduino, porque explica lo que pasa cuando tenés que declarar un tipo de datos y por qué a veces aparece esa palabra “typedef” que parece redundante. Pero al final lo que te salva la vida no es memorizarlo, sino entender por qué el compilador te obliga a escribir struct cada vez en C y cómo typedef te da una forma más cómoda de usar ese tipo después, especialmente cuando el código crece. Si ya venís de C++ puro o de lenguajes de más alto nivel, puede parecer una “peculiaridad histórica” del lenguaje, y de hecho en C++ moderno no necesitás typedef para que el nombre de la struct sea usable como tipo por sí mismo (lo que no se menciona en la entrada).

GDPR