error: erreur de syntaxe before numeric constant ???

error: erreur de syntaxe before numeric constant ??? - C - Programmation

Marsh Posté le 16-01-2007 à 12:38:30    

Code :
  1. Monde Nouvel_habitant(Monde *Aire_de_jeu, Fliste *agent, point destination)
  2. {
  3. int X=destination->a;
  4. int Y=destination->b;
  5. if((*Aire_de_jeu).plateau[X][Y].fourmiliere==NULL && (*agent)->genre=='f')
  6. {
  7.  (*Aire_de_jeu).plateau[X][Y].fourmiliere=(*agent);
  8.  (*agent)->posx=X; (*agent)->posy=Y;
  9.  return (*Aire_de_jeu);
  10. }
  11. if((*Aire_de_jeu).plateau[X][Y].fourmiliere!=NULL && (*agent)->genre=='f')
  12. {
  13.  return (*Aire_de_jeu);
  14. }
  15. (*agent)->posx=X; (*agent)->posy=Y;
  16. if((*Aire_de_jeu).plateau[X][Y].habitants==NULL)
  17. {
  18.  (*agent)->vprec=(*agent)->vsuiv=NULL;
  19.  (*Aire_de_jeu).plateau[X][Y].habitants=*agent;
  20.  return (*Aire_de_jeu);
  21. }
  22. (*agent)->vsuiv=(*Aire_de_jeu).plateau[X][Y].habitants;
  23. (*Aire_de_jeu).plateau[X][Y].habitants->vprec=*agent;
  24. (*Aire_de_jeu).plateau[X][Y].habitants=*agent;
  25. (*Aire_de_jeu).plateau[X][Y].habitants->vprec=NULL;
  26. return (*Aire_de_jeu);
  27. }


Je ne comprends pas ou est le problème...

Reply

Marsh Posté le 16-01-2007 à 12:38:30   

Reply

Marsh Posté le 16-01-2007 à 13:02:27    

Moi je comprends pas pourquoi tu nous a pas mis le numero de la ligne ou il y a un probleme... On ne connais meme pas tes structures de données!


Message édité par breizhbugs le 16-01-2007 à 13:04:26
Reply

Marsh Posté le 16-01-2007 à 19:17:36    

Chacal2k a écrit :

Je ne comprends pas ou est le problème...


Quel problème ?


Project   : Forums
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\dev\forums2\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
main.c:1: error: syntax error before "Nouvel_habitant"
main.c:1: error: syntax error before '*' token
main.c:2: warning: return type defaults to `int'
main.c:2: warning: function declaration isn't a prototype
main.c: In function `Nouvel_habitant':
main.c:3: error: `destination' undeclared (first use in this function)
main.c:3: error: (Each undeclared identifier is reported only once
main.c:3: error: for each function it appears in.)
main.c:6: error: `Aire_de_jeu' undeclared (first use in this function)
main.c:6: error: `NULL' undeclared (first use in this function)
main.c:6: error: `agent' undeclared (first use in this function)
Process terminated with status 1 (0 minutes, 4 seconds)
8 errors, 2 warnings


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-01-2007 à 19:37:54    

Je dirais, au feeling, que tu as du ecrire un truc du genre :
 
#define MACHIN = 42
 
edit apres la remarque d'ED : en gras

Message cité 1 fois
Message édité par Ace17 le 16-01-2007 à 20:02:48
Reply

Marsh Posté le 16-01-2007 à 19:41:46    

Ace17 a écrit :

Je dirais, au feeling, un truc du genre :
 
#define MACHIN = 42


Un suppo et au lit...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-01-2007 à 19:43:54    

Emmanuel Delahaye a écrit :

Un suppo et au lit...


 :pt1cable: non mais ho! il nous balance un code plus qu'incomplet, il nous donne meme pas la ligne qui pose probleme... mais il se trouve que c'est une erreur courante chez les debutants d'ecrire #define TRUC = bidule;  ..... et cette erreur cause ce message. Donc ton suppo, tu sais ou tu peux te le mettre  [:itm]

Reply

Marsh Posté le 16-01-2007 à 19:53:17    

Ace17 a écrit :

:pt1cable: non mais ho! il nous balance un code plus qu'incomplet, il nous donne meme pas la ligne qui pose probleme... mais il se trouve que c'est une erreur courante chez les debutants d'ecrire #define TRUC = bidule;  ..... et cette erreur cause ce message. Donc ton suppo, tu sais ou tu peux te le mettre  [:itm]


Ah, OK, je croyais que c'était la correction... bon, ben... Beark, c'est amer. Ah, c'est pas là que ça se met ?

 



Message édité par Emmanuel Delahaye le 16-01-2007 à 19:54:23

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-01-2007 à 20:09:42    

en fait ça s'écrit  
#define TRUC bidulle
 
(pas de '=' )

Reply

Marsh Posté le 16-01-2007 à 20:11:56    

On utilise pas #define pour les constantes :o


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 16-01-2007 à 20:33:27    

Dans la cat C, si

Reply

Marsh Posté le 16-01-2007 à 20:33:27   

Reply

Marsh Posté le 16-01-2007 à 20:49:14    

0x90 a écrit :

On utilise pas #define pour les constantes :o


Pourquoi pas ?
 
enum ne couvre pas tous les cas. int uniquement.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-01-2007 à 21:15:34    

Emmanuel Delahaye a écrit :

Pourquoi pas ?
 
enum ne couvre pas tous les cas. int uniquement.


 
Je pensais pas aux enums, je pensais aux const tout simplement. [:spamafote]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 16-01-2007 à 21:22:23    

Emmanuel Delahaye a écrit :

Pourquoi pas ?
 
enum ne couvre pas tous les cas. int uniquement.


 
+1 pour les const.
 
#define pour une constante est un moyen crado de la définir. Je trouve que ça fait partie des sales habitudes.  
Ca coute rien de faire un const, et au moins c'est typé. Ca évite les lignes de code à reprendre si un jour tu portes ton code sur un langage plus évolué qui trouve que faire  
 

Code :
  1. #define ma_var_float 6.5
  2. float test;
  3. if(test == ma_var_float)


 
c'est comparer un torchon et une serviette


---------------
Mon FeedBack Ebay
Reply

Marsh Posté le 16-01-2007 à 21:24:36    

0x90 a écrit :

Je pensais pas aux enums, je pensais aux const tout simplement. [:spamafote]


 

Code :
  1. const int N = 10;
  2. int tab[N];


 
Voici ce que me repond gcc - ce comportement m'a toujours surpris :


error: variable-size type declared outside of any function

Reply

Marsh Posté le 16-01-2007 à 21:45:30    

Chacal2k a écrit :

Code :
  1. Monde Nouvel_habitant(Monde *Aire_de_jeu, Fliste *agent, point destination)
  2. {
  3. int X=destination->a;
  4. int Y=destination->b;
  5. ...




Moi, quand je vois ça, je me dis que "point" est plus que certainement un type masquant un pointeur (combien masque-t-il d'étoile ? Mystère !!!) et rien que là j'hésite à lire la suite tant j'ai peur de ce que je vais découvrir...
 

Chacal2k a écrit :

Code :
  1. if((*Aire_de_jeu).plateau......



Encore une super intuition pour ne pas utiliser l'opérateur "->"  
 

Chacal2k a écrit :

Code :
  1. return (*Aire_de_jeu);



Ouais !!! Et vas-y que je te retourne une structure (ah moins que le type "Monde" masque lui-aussi une ou plusieurs étoiles...). Bon, j'arrête de décortiquer ce truc...
 

Chacal2k a écrit :

Je ne comprends pas où est le problème...


Principalement dans ta façon de coder. Masquer les étoiles c'est hyper sale parce que ça ne sert à rien (avec un peu d'habitude la manipulation de pointeurs simples devient triviale et les pointeurs doubles on s'en sort toujours assez bien quand aux pointeurs triples on arrive quasiment toujours à s'en passer). De plus, personne ne comprend les types que tu manipules (on a bien une idée mais pas de certitude) et c'est hyper facile de se tromper ensuite. Et je suis presque sûr que t'es pas capable toi-même de relire ce code (d'ailleurs si tu nous l'as apporté...).


Message édité par Sve@r le 16-01-2007 à 21:52:45

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 16-01-2007 à 22:15:24    

0x90 a écrit :

Je pensais pas aux enums, je pensais aux const tout simplement. [:spamafote]


Gné ?  :ouch:  :ouch:  :ouch: Quel rapport avec les expressions constantes ?
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-01-2007 à 22:19:07    

TheFox37 a écrit :

#define pour une constante est un moyen crado de la définir. Je trouve que ça fait partie des sales habitudes.


Bof, je ne vois pas pourquoi. Affirmation gratuite.

Citation :


Ca coute rien de faire un const, et au moins c'est typé. Ca évite les lignes de code à reprendre si un jour tu portes ton code sur un langage plus évolué qui trouve que faire  
 

Code :
  1. #define ma_var_float 6.5
  2. float test;
  3. if(test == ma_var_float)


 
c'est comparer un torchon et une serviette

Tu penses qu'un define n'est pas typé ? Alors apprend à l'utiliser correctement avant de critiquer :  

Code :
  1. #define ma_var_float 6.5f
  2. float test;
  3. if(test == ma_var_float)


 
"Il n'y a pas de mauvais langages, il n'y a que de mauvais codeurs"


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-01-2007 à 22:20:19    

Ace17 a écrit :

Code :
  1. const int N = 10;
  2. int tab[N];


 
Voici ce que me repond gcc - ce comportement m'a toujours surpris :


error: variable-size type declared outside of any function



Ben oui. Faut pas confondre expression constante et variable à lecture seule. Rien à voir. Ouvrez vos livres de C...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-01-2007 à 23:04:45    

Emmanuel Delahaye a écrit :

Ben oui. Faut pas confondre expression constante et variable à lecture seule. Rien à voir. Ouvrez vos livres de C...

 
Ah bon.
J'ai plutôt l'impression que le problème ici est que le VM-type (gcc dit le variable-size type) n'est pas déclaré dans un block ou dans une fonction - ce que requiert la norme C99.
 
 

Reply

Marsh Posté le 16-01-2007 à 23:17:02    

++fab a écrit :

Ah bon.
J'ai plutôt l'impression que le problème ici est que le VM-type (gcc dit le variable-size type) n'est pas déclaré dans un block ou dans une fonction - ce que requiert la norme C99.


Rien à voir. C'est un problème de VLA, pas de const.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 16-01-2007 à 23:20:04    

Oui, ton explication n'avait rien à voir. Le problème d'Ace17 est en rapport avec les VLA, pas avec const. (je referme mon livre de C)

Reply

Marsh Posté le 17-01-2007 à 09:03:51    

Emmanuel Delahaye a écrit :

Ben oui. Faut pas confondre expression constante et variable à lecture seule. Rien à voir. Ouvrez vos livres de C...


 
Ben ooops... comme on dit [:cupra]
 
En fait je met tellement peu en global que je me suis jamais pris le problème susmentionné (enfin si j'ai des constantes parfois, mais pas pour déclarer d'autres tableaux en global quoi).
Je vais effectivement aller relire mon bouquin de C y'a un truc que j'ai du louper.
Et si je préfer(ais) les const int ou const size_t c'est parce qu'il me semblait que ça permettait au debugger d'être plus clair (sauf en -g3 ou gcc retient aussi les macros).


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed