Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 ? tongue