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
typedefes casi obligatorio para mantener un código legible y profesional. Sin él, estás obligado a arrastrar la palabrastructpor 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 Puntodefine automáticamente el tipoPunto. Eltypedefes redundante en C++. Si estás programando en Arduino (que es C++), usartypedef structsuele 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
typedefes tu mejor aliado para crear «Tipos Opacos». Puedes declarartypedef 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.





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
structcada vez en C y cómotypedefte 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ástypedefpara que el nombre de la struct sea usable como tipo por sí mismo (lo que no se menciona en la entrada).