[C -Wall -pedantic] typedef et .h

Salut a tous !

J’ai quelques problemes avec typedef.
J’ai un programme d’othello en plusieurs fichiers dont un fichier othello.c (principal donc) qui contient

[cpp]
typedef struct
{
int * lignes;
int * colonnes;
int nbCoups;

} FeuillePartie;
[/cpp]

j’ai mis dans othello.h ceci:

[cpp]
typedef struct
{
int * lignes;
int * colonnes;
int nbCoups;

} FeuillePartie;
[/cpp]

et dans mon fichier sauvegarde.c jutilise cet type struct FeuillePartie en mettant bien evidament l’entete
[cpp]extern int sauvegardePartie(FeuillePartie *fp, int tailleOthellier);[/cpp]

et lors de la compile j’ai cette erreur:

In file included from othello.c:15:
sauvegarde.h:79: erreur: erreur de syntaxe avant un élément lexical « * »

79 etant la ligne sus-cité :stuck_out_tongue:
je suppose que sauvegarde.h ne comprend pas ce type et donc il y a une couille dans mes typedef je pense (othello.c utilise ce type sans probleme) ?

Please help

Cordialement

Edit: deplacer dans la Categorie C/C++/C#

fais tu ton prototypage avant ou apres la declaration de ta structure dans ton .h ?
as’tu inclu ton .h :smiley:

oui j’ai inclu le .h dans le fichier sauvegarde.
pour le prototypage, je sais pas ce que c’est :stuck_out_tongue:
javais declarere une variable globale dans mon othello.c et mis ca declaration dans le .h.
Pour le typedef, je l’ai rajouter juste apres dans mon .c et .h

[cpp]
extern int sauvegardePartie(struct FeuillePartie *fp, int tailleOthellier);
[/cpp]

Pourquoi extern ? Et pourquoi tu définit la struct dans l’entête et dans le source ?

clair ou est ce que t as appris a coder ? :wink:

define typedef toujours dans un .h…

extern (dans un .h) ça sert uniquement au link… souvent pour une variable global/function instanciée dans un autre fichier .c

On met pas les fonctions du .c dans le .h en rajoutant extern ?

Je n’est pas le droit de creer de nouveau modules et mon typedef doit etre visible dans othello.c et sauvegarde.c.

Si je suprimme mon typedef de mon othello.c ca me sort 10 nouvelles erreurs :confused:

Je pensais que c’etait quelquechose de facile de créer un typedef struct pouvant etre utilisé dans plusieurs modules :pfff:

toute structur déclarée avec typedef doit aller dans un fichier .h que tu pensera bien à inclure là où tu te sers de la structure…

oui mais je la met pas dans le .c du meme nom que le .h (j’ai fait ca pour une variable globale) ?
je rajoute pas extern devant?
jvous jure que jl’ai mis dans sauvegarde .h je capte pas pkoi ca marche pas vous pouver voir les sources avec le makefile ici

J’en suis a la 1.1.8, par rapport a la 1.1.7 il n’y eu aucun ajout d’include puisque sauvegarde.c et othello.c avait deja un include vers othello.c et vice-versa :heink:

une declaration et une variable c pas pareille !!!

une declaration c dans un header !!!

dans ton header tu va mettre

//macro de precompil
#define

//declaration d’un type
typedef struct … ;

// declaration de la variable
extern long global_clock;

//declaration de la fonction
int ma_fonction(void);

dans le ou les .c :

// instantiation de la variable
long global_clock=0;

//definition de la fonction
int ma_fonction(void){

}

ps #include d’un .c ça se fait tres tres rarement et c pour les pros :wink:

Inclure un fichier C ? Moi perso ce que j’aurai tendance à inclure c’est un fichier HTML pour faire moins porc, lors de sortie en html, et encore :o

autant pour moi j’avais dans un autre module de la fac fait ce type de truc a savoir typedef dans le .h.

Alors j’ai appliquer cette methode
mon typedef est dans othello.h, dans othello.c j inclu othello.h et ssauvegarde.h
et dans sauvegarde.h j’inclu othello.h

La il me sort cette erreur:

 make
gcc -Wall -pedantic -c othello.c
In file included from othello.c:15:
sauvegarde.h:79: erreur: erreur de syntaxe avant un élément lexical « * »
make: *** [othello.o] Erreur 1


la ligne 79 etant:


extern int sauvegardePartie(FeuillePartie *fp, int tailleOthellier);

Il n’ya a pas de probleme de double inclusion ?
Comment utiliser un #ifdef avant #include pour pas inclure 2 fois un module?

#ifndef _MONMODULE_H
#define _MONMODULE_H

#endif //_MONMODULE_H

Merci beaucoup tout marche :slight_smile: