Ho usato il seguente codice per creare varie strutture, ma solo dare alle persone esterne al file C un puntatore. (Sì, so che potrebbero potenzialmente rovinare tutto, quindi non è del tutto simile alla parola chiave privata in Java, ma va bene per me).Typedef e Struct in file C e H
In ogni caso, ho usato il seguente codice, e l'ho guardato oggi, e sono davvero sorpreso che funzioni, qualcuno può spiegare perché questo è?
Nel mio file C, Creo il mio struct, ma non me ne frega un tag nello spazio dei nomi typedef:
struct LABall {
int x;
int y;
int radius;
Vector velocity;
};
E nel file H, ho messo questo:
typedef struct LABall* LABall;
Ovviamente sto usando #include "LABall.h" nel file c, ma NON sto usando #include "LABall.c" nel file di intestazione, in quanto ciò vanificherebbe l'intero scopo di un file di intestazione separato. Quindi, perché sono in grado di creare un puntatore alla struttura LABall * nel file H quando non l'ho effettivamente incluso? Ha qualcosa a che fare con il namespace struct che lavora su file, anche quando un file non è in alcun modo collegato ad un altro?
Grazie.
Nascondere il fatto che qualcosa è un puntatore è generalmente considerato di cattivo gusto. E non è necessario - i puntatori opachi funzionano bene in C, date un'occhiata a FILE * per esempio - non c'è un tipo di puntatore FILE speciale. –
Ok, grazie. Sono solo troppo abituato a zoppicare java, che sembra voler nascondere il fatto che tutto è un puntatore. –