Pages : 1
#1 Le 06/01/2008, à 15:38
- _Raphael_
Probleme de compilation avec GCC
Bonjour,
Je suis en train de developper un programme qui genere et resoud des grilles de Sudoku.
Je travail sur un station sous mandriva au travail et je continu le soir sur ma station sous ubuntu.
J'ai installé GCC et ses mise à jour ainsi que built essential sur les 2 machines.
Cependant, je n'arrive pas à compiler certains fichiers sources sur ma station Ubuntu.
Ci-desssous : les erreurs...
Raphael@Raphael-laptop:~/Documents/Sudoku_raph$ gcc -c sudoku.c
sudoku.c:11: erreur: expected «)" before «s"
sudoku.c:26: erreur: expected «)" before «s"
sudoku.c:44: erreur: expected «)" before «s"
sudoku.c:53: erreur: expected «)" before «s"
sudoku.c:62: erreur: expected «)" before «s"
sudoku.c:74: erreur: expected «)" before «s"
sudoku.c:88: erreur: expected «)" before «s"
sudoku.c:104: erreur: expected «)" before «s"
et voici une des lignes correspondantent dans le programme :
void initialise_sudoku(Sudoku s){ }
Sudoku c'est une structure.
typedef struct{
int valeur;
int candidats[9];
int nb_candidats;
}t_case;
typedef t_case Sudoku[81];
Cette déclaration se trouve dans un fichier header(.h) appelé dans sudoku.c
Merci d'avance
Raphaà«l
#2 Le 06/01/2008, à 16:02
- Sysko le prospecteur
Re : Probleme de compilation avec GCC
hum
quand tu fais l'apelle tu passe
Sudoku s
en argument et si tu supprimais le "s" tout simplement
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#3 Le 06/01/2008, à 16:26
- _Raphael_
Re : Probleme de compilation avec GCC
Si je supprime le "s" il me faut modifier tout le programme, mais je ne pense pas (j'en suis même sur j'ai essayé au cas ou avant de dire non) que le problème vienne de là , j'avais déjà compilé une partie du programme sous mandriva et il ne m'affichait pas cette erreur. J'ai plutà´t l'impression que sous ubuntu, "Sudoku" n'est pas considéré comme un type.La question est pourquoi ça marche sous mandriva et pas sous ubuntu?
#4 Le 06/01/2008, à 17:02
- Sysko le prospecteur
Re : Probleme de compilation avec GCC
ce n'est pas tellement une question de distrib mais plus de la version de gcc utilisé je pense
sinon ok "s" c'est une variable de type Sudoku c'est cela ? je n'avais pas compris cela comme ça au depart
void initialise_sudoku(Sudoku s){ } c'est le prototype de ta fonction ?
car si oui c'est étrange qu'elle appairesse plusieurs fois dans ton code et sinon et bien c'est aussi bizarre ^^
à tu créés un typedef de ta structure ?
et sinon si ta fonction change les valeurs de ta structure "s" il vaut mieux utiliser un pointeur sur une structure comme argument de ta fonction
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#5 Le 06/01/2008, à 17:18
- _Raphael_
Re : Probleme de compilation avec GCC
J'ai crée un typedef de ma structure :
typedef struct{
int valeur;
int candidats[9];
int nb_candidats;
}t_case;
typedef t_case Sudoku[81]; c'est ce que contient (en partie) mon fichier header.
Dans mon fichier .c j'ai pleins de fonctions du genre :
void initialise_sudoku(Sudoku s)
{
int i,j;
for(i=0;i<81;i++)
{
scanf("%d",&(s[i].valeur));
if(s[i].valeur==0)
{
s[i].nb_candidats=9;
for(j=0;j<9;j++) s[i].candidats[j]=j+1;
}
}
}
qui ont en paramètre ce fameu type sudoku.
J'avais un "cahier des charges" pour ce projet , je ne me suis donc pas posé la question de savoir si il aurait mieux valu un pointeur sur la structure, j'avais déjà les déclarations des fonctions.
Je crois qu'il ne me reste plus qu'à trouver quelle version de gcc j'utilise sous mandriva pour pouvoir avancer.
#6 Le 06/01/2008, à 17:23
- Sysko le prospecteur
Re : Probleme de compilation avec GCC
alors j'ai relevé quelque petite maladresse
on met un return ; à la fin du fonction retournant void ;
souvent pour faire des typedef de structure on préféra
typedef struc ma_structure ma_structure
struc ma_structure
{
// tout ce que tu veux
}
car j'avoue que ta façon d'utiliser le typedef est assez maladroite
ton cahier des charges c'est l'énoncé de l'exercice ? ^^
sinon si cela ne te gêne pas je pourrais avoir ton code en entier car je crois voir d'o๠vient le problème mais j'aimerais en être sur
Dernière modification par Sysko le prospecteur (Le 06/01/2008, à 17:26)
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#7 Le 06/01/2008, à 18:25
- _Raphael_
Re : Probleme de compilation avec GCC
avant de me lancer dans des copier coller a la chaine tu veux voir le .h ou le .c ?
Ils ne nous permettent pas vraiment de sortir de l'énoncé, ils préfèrent qu'on suive leur ordre de résolution de l'exercice, du coup les intitulés des fonctions. Je veux bien admettre que j'ai une utilisation du C plutot approximative, ce n'est pas mon domaine de prédilection, mais une chose est sure c'est que rédigé ainsi le programme a déjà marché!
#8 Le 06/01/2008, à 18:39
- Sysko le prospecteur
Re : Probleme de compilation avec GCC
Oui c'est évident
montre moi tout le .h et ensuite la ligne ou tu declare un structure de type sudoku et après un prototype de l'un des fonctions ( juste le prototype ) et un apelle de cette fonction
mais je pense que cela vient de ta façon d'utiliser les typedef
car en fait si j'ai bien compris ce que tu veux faire
créer une structure t_case te permettant de modeliser une case d'une grille de sudoku
et un TABLEAU de 81 struc t_case nomé sudoku et représentant une grille de sudoku
c'est bien cela ?
Dernière modification par Sysko le prospecteur (Le 06/01/2008, à 18:44)
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#9 Le 06/01/2008, à 18:45
- _Raphael_
Re : Probleme de compilation avec GCC
Voici le .h
#ifndef SUDOKU_H
#define SUDOKU_H
typedef struct{
int valeur;
int candidats[9];
int nb_candidats;
}t_case;
typedef t_case Sudoku[81];
void initialise_sudoku(Sudoku s);
void affiche_sudoku(Sudoku s);
void reduit_candidats_ligne(Sudoku s, int ligne, int val);
void reduit_candidats_colonne(Sudoku s,int colonne,int val);
void reduit_candidats_region(Sudoku s,int region,int val);
void reduire_candidats(Sudoku s);
int valide_candidats_uniques(Sudoku s);
int resoud_sudoku(Sudoku s);
//int candidats_caches_ligne(Sudoku s);
//int compte_occurences_ligne(Sudoku s,int ligne,int val,int *colonne);
//int compte_occurences_colonne(Sudoku s,int colonne,int val,int *ligne)
#endif
un exemple d'appel :
#include <stdio.h>
#include "tableau.h"
#include "sudoku.h"
int main()
{
Sudoku s;
initialise_sudoku(s);
affiche_sudoku(s);
return(0);
}
c'est ce que j'ai testé qui marchait.
#10 Le 06/01/2008, à 19:10
- Sysko le prospecteur
Re : Probleme de compilation avec GCC
okay le problème vient bien de tes typedef qui sont un peu foireux
à la rigueur le premier typedef pour t_case est recevable , personnellement je ne fais pas comme cela mais j'ai deja croisé pas mal de fois cette syntaxe
le problème vient de ton typedef t_case sudoku[81]
quand tu fais cela , pour le compilateur sudoku[81] équivaudra à t_case ( en C ANSI cad en code portable )
et non pas à créer une structure composé de 81 sousstructure t_case
il te faut donc pour avoir du code portable et lisible et compte tenu des restrictions qui te sont imposé pour ton exo
de créer une structure à part nomé Sudoku
et de t'arranger pour qu'elle contienne les elements nécessaires à la resolution de ton problème
( personnellement je ferais autrement au vu des prototypes qu'il te sont donné mais après tu fais comme tu veux )
car c'est le comportement de ton compilateur sous mandriva qui était deviant de la norme
PS : c'est return 0 ( ou mieux return EXIT_SUCCESS ) plutot que return (0) ; ,return n'est pas une fonction
Dernière modification par Sysko le prospecteur (Le 06/01/2008, à 19:13)
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#11 Le 06/01/2008, à 19:37
- ipingu
Re : Probleme de compilation avec GCC
Juste un truc :
typedef t_case[81] Sudoku;
ne passe-t-il pas ? Je trouve ça assez étrange de déclarer un alias de la manière que tu fais. Mais je ne garantis pas du tout que le code que je te présente résolve le problème.
Hors ligne
#12 Le 06/01/2008, à 19:56
- Sysko le prospecteur
Re : Probleme de compilation avec GCC
c'est ce que j'avais pensé aussi mais compte tenu des prototype que lui donen l'énoncé je pense q'on attend plus de lui qu'il crée une structure Sudoku , après je ne suis pas sur mais il me semble que cela risque de planter vu que l'on utilise sudoku comme type dans les prototypes, après je n'ai pas d'outil de compilation sos la main pour verifier et puis c'est en testant qu'on apprend donc je laisse à l'ami raphael le soin d faire ce genre de test
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#13 Le 06/01/2008, à 21:00
- ipingu
Re : Probleme de compilation avec GCC
Avec l'utilisation de sa variable s de type Sudoku comme un tableau, s[i], j'imagine que le type Sudoku est juste un tableau. Auquel cas je pense que ca devrait marcher comme précisé plus haut, en attente de ton avis _Raphael_
Hors ligne
#14 Le 07/01/2008, à 13:17
- _Raphael_
Re : Probleme de compilation avec GCC
Test effectué : l'erreur persiste.
#15 Le 07/01/2008, à 13:45
- Sysko le prospecteur
Re : Probleme de compilation avec GCC
oui normal comme je le disais cela vient du fait que le typedef va juste remplacer toute les occurence de
sudoku par t_case[81]
dans le cas d'un
typedef t_case[81] sudoku
il faudra donc comme explicité au dessus crée de façon standarde une structure sudoku
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#16 Le 07/01/2008, à 17:49
- _Raphael_
Re : Probleme de compilation avec GCC
Aprés de longues investigations, la solution au problème a été trouvée : j'avais fait une erreur dans le tableau.h appelé, j'avais mal écrit le ifndef...
#17 Le 09/01/2008, à 21:26
- Misssss*
Re : Probleme de compilation avec GCC
Humm, L2 info à l'UPS ?