[C::B-Linux] Erreur bizzare
Bonjour,
Un truc qui me gonfle, j'ai une erreur trés zarb regardez:
fonctions.c
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include "module.h"
void Sort_Table (CHAR tab [MAX_CHAR]){
int count1,
count2;
CHAR tmp;
for (count1 = 0; count1 < MAX_CHAR; count1++)
for (count2 = 0; count2 < (MAX_CHAR-1); count2++)
if (tab[count2].occur > tab[(count2+1)].occur){
tmp = tab[count2];
tab[count2] = tab[(count2+1)];
tab[(count2+1)] = tmp;
}
} |
le type CHAR:
Code:
1 2 3 4 5
| typedef struct{
unsigned char car;
int occur;
}CHAR; |
dans fonctions.h:
Code:
void Sort_Table (CHAR tab[MAX_CHAR]);
et le compilo me signal une erreur dans foncions.h
Citation:
erreur: expected ')' before 'tab'
???
Merci
Re: [C::B-Linux] Erreur bizzare
Citation:
Envoyé par Goundy
et le compilo me signal une erreur dans foncions.h
Citation:
erreur: expected ')' before 'tab'
8O 8O
Effectivement, d'où peut provenir cette erreur ???
Encore un grand mystère de l'informatique.
Tu es sur que c'est sur cette partie de code ?
Le compilo ne donne pas de numéro de ligne ?
Re: [C::B-Linux] Erreur bizzare
Citation:
Envoyé par Goundy
le type CHAR:
Code:
1 2 3 4 5
| typedef struct{
unsigned char car;
int occur;
}CHAR; |
dans fonctions.h:
Code:
void Sort_Table (CHAR tab[MAX_CHAR]);
et le compilo me signal une erreur dans foncions.h
Citation:
erreur: expected ')' before 'tab'
Est-ce que CHAR est bien défini avant usage ?
Re: [C::B-Linux] Erreur bizzare
Citation:
Envoyé par Goundy
le type CHAR:
Code:
1 2 3 4 5
| typedef struct{
unsigned char car;
int occur;
}CHAR; |
dans module.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #ifndef H_MODULE
#define H_MODULE
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "fonctions.h"
#define DONE 0
#define MAX_CHAR 255
typedef struct {
unsigned char car;
int occur;
}CHAR;
#endif |
Re: [C::B-Linux] Erreur bizzare
Citation:
Envoyé par Emmanuel Delahaye
Est-ce que CHAR est bien défini avant usage ?
Je ne vois pas comment:
Question:
Citation:
Envoyé par niglo
Effectivement, d'où peut provenir cette erreur ???
Encore un grand mystère de l'informatique.
Réponse:
Citation:
Envoyé par Goundy
Yes, ligne 1 dans le fichier fonctions.h
Re: [C::B-Linux] Erreur bizzare
NON!
Question:
Citation:
Envoyé par niglo
Tu es sur que c'est sur cette partie de code ?
Le compilo ne donne pas de numéro de ligne ?
Réponse
Citation:
Envoyé par Goundy
Yes, ligne 1 dans le fichier fonctions.h
Re: [C::B-Linux] Erreur bizzare
Citation:
Envoyé par Goundy
Citation:
Envoyé par Goundy
le type CHAR:
Code:
1 2 3 4 5
| typedef struct{
unsigned char car;
int occur;
}CHAR; |
dans module.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #ifndef H_MODULE
#define H_MODULE
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "fonctions.h"
#define DONE 0
#define MAX_CHAR 255
typedef struct {
unsigned char car;
int occur;
}CHAR;
#endif |
Donc, il est défini après ! Il faut cesser de bricoler et commencer à travailler avec méthode.
La regle de conception est simple :
Citation:
Un header doit être 'autonome'. Tout ce qu'il utilise doit avoir été défini avant, soit par définition directe, soit par inclusion. Ni plus ni moins.
Ici, je conseille :
Code:
1 2 3 4 5 6
| #ifndef H_MODULE
#define H_MODULE
#define DONE 0
#endif |
Ce header séparé est-il vraiment utile ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
#ifndef H_FONCTIONS
#define H_FONCTIONS
#define MAX_CHAR 255
typedef struct
{
unsigned char car;
int occur;
}
CHAR;
void Sort_Table (CHAR tab[MAX_CHAR]);
#endif /* guard */ |
J'ai quand même passé du temps à expliquer tout ça sur mon site, c'est un peu dommage de ne pas suivre les conseils qui y sont données...
http://emmanuel-delahaye.developpez....ganiser_source
http://emmanuel-delahaye.developpez.....htm#organiser
et ne me dit pas que c'est une découverrte, depuis le temps que tu postes ici...
Je rappelle que les headers ne sont pas là pour 'faciliter le codage' en incluant des choses qu'on veut cacher, mais pour fournir l'exact interface nécessaire à l'utilisation des fonctions et objets publics.
Ici, on a
Code:
void Sort_Table (CHAR tab[MAX_CHAR]);
donc, on doit avoir la définition de CHAR et celle de MAX_CHAR.
En général, se sont précisément ces définitions communes qui font que des fonctions vont naturellement se regrouper dans des headers et modules spécialisés. Il y a tout simplement un 'lien organique' entre elles, qui est le type. Les fonctions vont tout simplememnt manipuler des objets de type CHAR. Il serait donc naturel que le header (et le fichier d'implémentation correspondant) s'appelle char.h / char.c.
Pour une approche sytématique :
http://emmanuel-delahaye.developpez.com/tad.htm
Re: [C::B-Linux] Erreur bizzare
Citation:
Envoyé par Goundy
NON!
Question:
Citation:
Envoyé par niglo
Tu es sur que c'est sur cette partie de code ?
Le compilo ne donne pas de numéro de ligne ?
Réponse
Citation:
Envoyé par Goundy
Yes, ligne 1 dans le fichier fonctions.h
C'est guère mieux, finalement ton fichier fonctions.h ressemble à ceci:
Code:
1 2
|
void Sort_Table (CHAR tab[MAX_CHAR]); |
Comment veux-tu que dans le fichier fonctions.h, le compilateur connaisse le type CHAR?
Comme Emmanuel a dit dans un autre post:
(ici)
Citation:
Un header doit être 'autonome'. Il doit contenir/inclure tout ce qu'il lui est nécessaire. Ni plus, ni moins.
Donc il faut changer ta façon de faire tes .h...
Jc