PDA

Ver la Versión Completa : Diferencia conceptual entre struct y typedef struct


Crandel
19-12-2004, 20:22:06
Hola a todos,
Ya se que esta no es la clase de pegunta que solemos hacer, aca viene.

Cuando defino un estructura en C++ (remarco que C++, por no es igual en C), por ejemplo, un punto definido por sus coordenadas x y y:


struct Point {
float x;
float y;
};


Puedo utilizarlo simplemente declarando una variable de su tipo

Point P;
P.x = 10.3;
P.y = 3.5;


Ahora también puedo definirlo utilizando typedef:


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


y lo utilizo exactamente igual que antes.

Pero, en el primer caso estoy creando la variable, llamando al nombre de la estrcutura y en el segundo llamandolo por un "etiqueta" que le puse a la misma estructura.

Existe alguna diferencia cuando se crea la varaible?.
Son exactamente iguales?
Si son iguales, cual es la ventaja de usar el typedef?

Gracias

Crandel

pd: es importante tener los conceptos claros

Edgar++
26-12-2004, 22:14:18
Holas! soy nuevo en el foro, pero voy a tratar de ayudar en lo que pueda :D

Si declarás la estructura asi:


struct Point{
float x, y;
};

entonces tendrías que declarar una variable de su tipo en C así:


struct Point punto;

pero en C++ tambien lo podes hacer así:


Point punto;

cosa que para hacerlo así en C tenes que declarar un tipo definido por el usuario así:


typedef struct Point Point;

Nota: Es válido declarar un tipo con el mismo nombre que una estructura, union o enumeración, ya que el compilador los trata de una forma especial.

En resumen, es conveniente declarar la estructura y la variable como se hace en C, para mayor compatibilidad (a no ser, claro, que se usen clases o cosas propias de C++), aunque la nueva forma de C++ es más coherente... No hay diferencia en cuanto a una declaración u otra, son exactamente lo mismo para C++, pero en C no compila la segunda alternativa...

Crandel
27-12-2004, 01:06:35
Hola Edgar, muchas gracias por la respuesta, en C lo tenia claro, pero la pregunta iva destinada especificamente a C++ que no estaba seguro como lo trataba.

Gracias :D

Crandel