Definitions de types pas encore definis dans un type
Salut !
j'ai un trou de memoire qui me trouble.. Comment faire pour pouvoir declarer dans un type, des types qui n'ont pas encore été déclaré ?
Exemple :
Code:
1 2 3 4 5 6 7 8 9 10
|
typedef struct {
typeA a;
int truc;
} typeB;
typedef struct {
typeB b;
char * machin;
} typeA; |
On peut faire des prototypes ?
merci
a+
Re: Definitions de types pas encore definis dans un type
Citation:
Envoyé par lechewal
Comment faire pour pouvoir declarer dans un type, des types qui n'ont pas encore été déclaré ?
Code:
1 2 3 4 5 6 7 8 9 10
|
typedef struct {
typeA a;
int truc;
} typeB;
typedef struct {
typeB b;
char * machin;
} typeA; |
Déjà, pose toi la question de savoir si tu as vraiment besoin d'avoir de tels croisements, parce que c'est souvent le signe d'une mauvaise conception. Mais si tu y tiens, c'est possible si ce sont des pointeurs en utilisant des définitions de structures séparées :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
struct A;
typedef struct {
struct A *a;
int truc;
} typeB;
typedef struct A {
typeB b;
char * machin;
} typeA; |
ou des typedefs séparés :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
typedef struct A TypeA;
typedef struct {
TypeA *a;
int truc;
} typeB;
typedef struct A {
typeB b;
char * machin;
} typeA; |
Re: Definitions de types pas encore definis dans un type
Citation:
Envoyé par Emmanuel Delahaye
Déjà, pose toi la question de savoir si tu as vraiment besoin d'avoir de tels croisements, parce que c'est souvent le signe d'une mauvaise conception.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| typedef struct I I;
typedef struct N N;
struct I {
N* n;
struct I* next;
struct I* prev;
/* et d'autres champs */
};
struct N {
I** tableOfI;
/* et d'autres champs */
}; |
Si tu penses qu'il s'agit d'une mauvaise conception, pourrais-tu en donner les raisons et proposer des alternatives? Il faut pouvoir passer d'un N aux I, d'un I au N, ajouter un I à un N, enlever un I d'un N. Un N peut avoir facilement une dizaine de milliers de I (la tableOfI est une table de hachage que d'autres champs permettent de gérer -- en pratique c'est encapsulé par un type intermédiaire).
Re: Definitions de types pas encore definis dans un type
Citation:
Envoyé par Jean-Marc.Bourguet
Citation:
Envoyé par Emmanuel Delahaye
Déjà, pose toi la question de savoir si tu as vraiment besoin d'avoir de tels croisements, parce que c'est souvent le signe d'une mauvaise conception.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| typedef struct I I;
typedef struct N N;
struct I {
N* n;
struct I* next;
struct I* prev;
/* et d'autres champs */
};
struct N {
I** tableOfI;
/* et d'autres champs */
}; |
Si tu penses qu'il s'agit d'une mauvaise conception, pourrais-tu en donner les raisons et proposer des alternatives? Il faut pouvoir passer d'un N aux I, d'un I au N, ajouter un I à un N, enlever un I d'un N. Un N peut avoir facilement une dizaine de milliers de I (la tableOfI est une table de hachage que d'autres champs permettent de gérer -- en pratique c'est encapsulé par un type intermédiaire).
Je pense qu'il s'agit d'une utilisation avancée du langage C.
Dans le cas du posteur original (que je suppose être un débutant, peut être à tord), souvent un peu de reflexion sur l'organisation des données permet d'éviter ça.
Mais j'admet qu'il existe des cas où il n'est pas possible de faire autrement, et je n'ai d'ailleurs rien dit d'autre dans mon intervention. J'ai même indiqué comment faire.