He estado usando el siguiente código para crear varias struct, pero solo le doy un puntero a las personas que están fuera del archivo C. (Sí, sé que podrían potencialmente perder el tiempo con eso, así que no es del todo como la palabra clave privada en Java, pero me parece bien).Typedef y Struct en archivos C y H
De todos modos, he estado usando el siguiente código, y lo he visto hoy, y estoy realmente sorprendido de que realmente funcione, ¿alguien puede explicar por qué?
En mi archivo C, creo mi estructura, pero no le doy una etiqueta en el espacio de nombres typedef:
struct LABall {
int x;
int y;
int radius;
Vector velocity;
};
Y en el archivo H, puse esto:
typedef struct LABall* LABall;
Obviamente, estoy usando #include "LABall.h" en el archivo c, pero NO estoy usando #include "LABall.c" en el archivo de encabezado, ya que eso anularía el propósito de un archivo de encabezado separado. Entonces, ¿por qué puedo crear un puntero a la estructura LABall * en el archivo H cuando no lo he incluido realmente? ¿Tiene algo que ver con el espacio de nombres struct que funciona entre archivos, incluso cuando un archivo no está vinculado de ninguna manera con otro?
Gracias.
Ocultar el hecho de que algo es un puntero generalmente se considera un mal estilo. Y no es necesario: los punteros opacos funcionan bien en C, eche un vistazo a FILE *, por ejemplo, no hay ningún tipo de puntero de ARCHIVO especial. –
Bien, gracias. Estoy demasiado acostumbrado a lame java, que parece encantado de ocultar el hecho de que todo es un puntero. –