Estructuras, definición de tipos y estructuras anónimas en C

written by uve 22 February 2011

Estoy ahora trabajando en C y voy a explicar brevemente acerca de los structs. Imagino que todos los que hayan programado alguna vez en C conocerán este tipo de dato. No trato de explicar qué es una estructura, sino detallar algunas situaciones particulares con ellas: estructuras anónimas y definición de tipos.

Voy a empezar con un ejemplo muy básico:

struct Punto
{
   float x;
   float y;
};

Partiendo de esta estructura, nosotros podremos tener distintas instancias, por ejemplo:

struct Punto p1, p2;
p1.x = 0.5;
p1.y = 0.5;
p2.x = 1.5;
p2.y = 3.0;

En C++ se puede omitir la palabra reservada struct a la hora de la declaración de las variables (no en la definición), pero en C es obligatorio ponerla.

struct Punto p; // Correcto en C y C++
Punto p; // Incorrecto en C, pero Correcto en C++

Además, se puede aprovechar la definición de la estructura para declarar variables:

struct Punto
{
   float x;
   float y;
} p1, p2;

Esto es equivalente a:

struct Punto
{
   float x;
   float y;
};
struct Punto p1, p2;

Ahora es cuando entra en juego la definición de tipos: typedef. Este mecanismo nos permite hacer esto mismo. Para ello, vamos a cambiar la definición de nuestra estructura:

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

Por si alguien no conocía typedef, esta palabra reservada nos permite hacer sinónimos de tipos de datos. Veamos un ejemplito más sencillo:

typedef int MiEntero;
MiEntero a;

Así, en cualquier lugar del código dónde usemos MiEntero, sería equivalente a poner int. Por tanto, tras la última declaración de la estructura, la siguiente declaración es completamente válida en C:

Punto p1, p2;

Utilizando typedef en la declaración del struct perdemos la posibilidad de realizar declaración de variables durante la definición, tal y como se explicó antes.

¿Qué son las estructuras anónimas? Básicamente su nombre lo indica, son estructuras sin nombre, por lo cual no podremos realizar declaraciones de ese tipo. Veamos un ejemplo:

struct
{
   float x, y;
};

Ésta es una estructura anónima. Para poder declarar variables de este tipo, es obligatorio hacerlo en la definición, o lo que es lo mismo, una vez definida no se podrán crear más variables ni se podrán pasar como parámetro:

struct
{
   float x, y;
} p1, p2;

Por lo general no se hace uso de estructuras anónimas, pero en algunas ocasiones es interesante utilizarlas.

Tags

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.