Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
688 connectés 

  FORUM HardWare.fr
  Programmation
  C

  pb de compilation/macro

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb de compilation/macro

n°1181321
nifnef
Posté le 22-08-2005 à 15:30:55  profilanswer
 

Bonjour,
 
j'ai récupéré un code en C que j'essaie de compiler pour en faire une biblio statique.
Dans ce code, il y a un fichier avec une pelle de #define et j'ai des pb de compilation a cause de ca (j'ai mis en commentaire une partie des define et ca va mieux, ca plante plus loin mais bon...toujours a cause des define d'ailleurs). L'erreur c'etait genre IMAGE_DTYPE non défini (alors que c'est défini dans les macros justement)
Comme ce n'est pas mon code, je ne sais pas si j'ai le droit de le publier ici, alors je voudrai juste savoir a quoi il faut faire particulierement attention quand on utilise des #define ?
Merci !

mood
Publicité
Posté le 22-08-2005 à 15:30:55  profilanswer
 

n°1181327
Elmoricq
Modérateur
Posté le 22-08-2005 à 15:44:26  profilanswer
 

nifnef a écrit :

Dans ce code, il y a un fichier avec une pelle de #define et j'ai des pb de compilation a cause de ca (j'ai mis en commentaire une partie des define et ca va mieux, ca plante plus loin mais bon...toujours a cause des define d'ailleurs).  


 
:heink:  
 
A mon sens, tu n'as fait que reporter le problème. Tu devais avoir dans tes #define des références à des choses que le compilateur ne comprenait pas, genre un type non défini ou une fonction non déclarée.
Commenter les #define ne devrait que reporter l'erreur sur des emplois de #define qui pour le coup seront inconnus.
 

Citation :

L'erreur c'etait genre IMAGE_DTYPE non défini


 
Bingo.
Décommente tes #define, et regarde plutôt s'il ne te manque pas des fichiers.
 
 

Citation :

(alors que c'est défini dans les macros justement)


 
Manque forcément quelque chose.


Message édité par Elmoricq le 22-08-2005 à 15:45:54
n°1181374
nifnef
Posté le 22-08-2005 à 16:41:27  profilanswer
 

arf! effectivement, j'avais oublié de compiler avec une dépendance...  :pfff:  
Mais bon, ca ne fonctionne toujours pas! maintenant il me sort une erreur syntaxique!
 

Code :
  1. #ifdef SPM_DOUBLE
  2. #ifdef SPM_BYTESWAP
  3. #define GET(x) getdouble(x)
  4. #define RESAMPLE resample_double_s
  5. #define RESAMPLE_D resample_d_double_s
  6. #define SLICE slice_double_s
  7. #define RESAMPLE_0 resample_double_s_0
  8. #define RESAMPLE_1 resample_double_s_1
  9. #define RESAMPLE_D_1 resample_d_double_s_1
  10. #define RESAMPLE_POLY resample_double_s_poly
  11. #define RESAMPLE_D_POLY resample_d_double_s_poly
  12. #define SLICE_0 slice_double_s_0
  13. #define SLICE_1 slice_double_s_1
  14. #define SLICE_POLY slice_double_s_poly
  15. #define PLANE plane_double_s
  16. #else
  17. #define GET(x) (x)
  18. #define RESAMPLE resample_double
  19. #define RESAMPLE_D resample_d_double
  20. #define SLICE slice_double
  21. #define RESAMPLE_0 resample_double_0
  22. #define RESAMPLE_1 resample_double_1
  23. #define RESAMPLE_D_1 resample_d_double_1
  24. #define RESAMPLE_POLY resample_double_poly
  25. #define RESAMPLE_D_POLY resample_d_double_poly
  26. #define SLICE_0 slice_double_0
  27. #define SLICE_1 slice_double_1
  28. #define SLICE_POLY slice_double_poly
  29. #define PLANE plane_double
  30. #endif
  31. #define IMAGE_DTYPE double
  32. #endif
  33. #include <math.h>
  34. #include <stdlib.h>
  35. #include "spm_sys_deps.h"
  36. #include "spm_make_lookup.h"
  37. #include "spm_getdata.h"
  38. static void (*make_lookup)() = make_lookup_poly;
  39. static void (*make_lookup_grad)() = make_lookup_poly_grad;
  40. void RESAMPLE_0(int m, IMAGE_DTYPE* vol[], double out[], double x[], double y[], double z[],
  41.  int xdim, int ydim, int zdim, double background, double scale[], double offset[])
  42. {
  43. //corps de la fonction
  44. }


 
je ne vous ai mis qu'un extrait des macros ;)
donc mon erreur c'est :
[gcc]
spm_vol_utils.c:251: error: erreur de syntaxe before "IMAGE_DTYPE"
spm_vol_utils.c: Dans la fonction « RESAMPLE_0 »:
spm_vol_utils.c:255: error: `m' undeclared (first use in this function)
spm_vol_utils.c:255: error: (Each undeclared identifier is reported only once
spm_vol_utils.c:255: error: for each function it appears in.)
spm_vol_utils.c:258: error: `x' undeclared (first use in this function)
[/gcc]
pour nous c'est erreur ligne 45 (la premiere)
les SPM_MACHIN sont définis dans spm_getdata.h
aucune des variables n'est reconnue, et surtout pas IMAGE_DTYPE !
 
Si tu vois qq chose Elmoricq... j'y ai passé presque ma journée ca me met les nerfs en boule!


Message édité par nifnef le 22-08-2005 à 16:43:13
n°1181379
theshockwa​ve
I work at a firm named Koslow
Posté le 22-08-2005 à 16:47:58  profilanswer
 

et si tu compiles avec un -DSPM_DOUBLE ? [:petrus75]

n°1181392
Elmoricq
Modérateur
Posté le 22-08-2005 à 16:58:41  profilanswer
 

theshockwave a écrit :

et si tu compiles avec un -DSPM_DOUBLE ? [:petrus75]


 
Euh. S'il doit ajouter ce genre d'option pour que ça compile, à mon sens, y a un truc qui cloche.
Doit encore manquer des dépendances je pense, où se trouve le fameux SPM_DOUBLE défini.
 
Je peux me tromper.
 
Sinon au pire, il peut effectivement essayer cette option... Mais bon...  [:jagstang]


Message édité par Elmoricq le 22-08-2005 à 17:00:14
n°1181410
nifnef
Posté le 22-08-2005 à 17:13:56  profilanswer
 

yeah!Merci the shockwave! ca marche mieux (ca replante plus loin pour la meme erreur) par contre je n'ai pas compris ce que j'ai fait?! (ce que vous m'avez fait faire)
ca veut dire quoi -D ?
 
C'est défini dans datatypes.h

Code :
  1. #define SPM_UNSIGNED_CHAR     2
  2. #define SPM_SIGNED_SHORT      4
  3. #define SPM_SIGNED_INT        8
  4. #define SPM_FLOAT             16
  5. #define SPM_DOUBLE            64
  6. #define SPM_SIGNED_CHAR       (SPM_UNSIGNED_CHAR+128)
  7. #define SPM_UNSIGNED_SHORT    (SPM_SIGNED_SHORT+128)
  8. #define SPM_UNSIGNED_INT      (SPM_SIGNED_INT+128)
  9. /* byte swapped types */
  10. #define SPM_SIGNED_SHORT_S    (SPM_SIGNED_SHORT<<8)
  11. #define SPM_SIGNED_INT_S      (SPM_SIGNED_INT<<8)
  12. #define SPM_FLOAT_S           (SPM_FLOAT<<8)
  13. #define SPM_DOUBLE_S          (SPM_DOUBLE<<8)
  14. #define SPM_UNSIGNED_SHORT_S  (SPM_UNSIGNED_SHORT<<8)
  15. #define SPM_UNSIGNED_INT_S    (SPM_UNSIGNED_INT<<8)
  16. #define ISSWAPPED(A)  (A > 256)
  17. #define DESWAP(A)  (A >> 8)


 
 
 
là où ca plante maintenant:

Code :
  1. #define TINY 5e-2
  2. /* First order hold resampling - trilinear interpolation */
  3. int SLICE_1(double mat[16], double image[], int xdim1, int ydim1, IMADE_DTYPE* vol[], int xdim2, int ydim2, int zdim2, double background, double scale[], double offset[])


 
il faudrait que je mette -DSPM_DOUBLE/FLOAT/CHAR/UNSIGNED_CHAR, etc.. a la compilation?
En tout cas je pense (c'est obligé) que c'est un pb de compilation, puisqu'avant que je l'aie entre les mains ca fonctionnait  :D  
...(en même temps, vu la PCPoisse que j'ai.. :pfff:


Message édité par nifnef le 22-08-2005 à 17:16:21
n°1181432
theshockwa​ve
I work at a firm named Koslow
Posté le 22-08-2005 à 17:32:10  profilanswer
 

dans ce cas, ca veut dire que tu dois inclure datatypes.h avant d'inclure ton fichier qui contient tes macros ...

n°1181456
Emmanuel D​elahaye
C is a sharp tool
Posté le 22-08-2005 à 17:52:49  profilanswer
 

nifnef a écrit :

ca veut dire quoi -D ?


C'est le début d'une commande ligne comprise par de nombreux compilateurs qui signifie 'Définir une macro de portée globale à l'unité de compilation'  
 
On peut faire

gcc ... -DMYMACRO ...


(définir)
 
ou même

gcc ... -DMYMACRO=123 ...


(définir et donner une valeur)
 
selon les besoins.


Message édité par Emmanuel Delahaye le 22-08-2005 à 17:53:27

---------------
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/
n°1181458
matafan
Posté le 22-08-2005 à 17:55:33  profilanswer
 

Et les headers que tu utilises ont ete ecrit avec les pieds, parce qu'ils devraient inclure eux-meme tout ce dont ils ont besoins.
 
Sinon -DTOTO ca defini le symbole TOTO. C'est comme si tu ajoutais un "#define TOTO" au debut de chacun de tes fichiers.

n°1181494
nifnef
Posté le 22-08-2005 à 18:25:25  profilanswer
 

j'ai vraiment du mal avec l'anglais, parce qu'en lisant ca je comprenais pas grand chose : (man gcc)
 D   Dump all macro definitions, at the end of preprocessing, in addition to normal output.
 
Matafan, faut les excuser, c'est pas des informaticiens qui ont codé.. bon... faut que je vérifie mes dependances si je comprend bien!
j'y retourne!
 
Merci a tous

mood
Publicité
Posté le 22-08-2005 à 18:25:25  profilanswer
 

n°1181499
theshockwa​ve
I work at a firm named Koslow
Posté le 22-08-2005 à 18:32:08  profilanswer
 

nifnef a écrit :

Matafan, faut les excuser, c'est pas des informaticiens qui ont codé..


 
Vu ton fichier datatypes et sa cohérence au niveau des définitions, on n'avait plus trop de doute [:dawa]

n°1181571
matafan
Posté le 22-08-2005 à 21:09:16  profilanswer
 

nifnef a écrit :

j'ai vraiment du mal avec l'anglais, parce qu'en lisant ca je comprenais pas grand chose : (man gcc)
 D   Dump all macro definitions, at the end of preprocessing, in addition to normal output.


Non ca c'est -dD, pas -D.

n°1181963
nifnef
Posté le 23-08-2005 à 08:23:15  profilanswer
 

et moi qui doit tout relire et recoder, j'en bave à mort!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  pb de compilation/macro

 

Sujets relatifs
Activer plusieurs onglets dans une macroSomme d'un nbre évolutif d'elmts &ref à une feuille cree ds la macro
Comment faire cette macro?MACRO inopérante si déplacer
[VBA - Word]: Lancer une macro en mode consoleprobleme de Boucle avec une macro!!!!
[Java] Compilation avec AntMacro Excel --> Ajouter un caractère
En quoi consiste la compilation sur VBA (Excel)Probleme de compilation Visual C++, enfin je crois
Plus de sujets relatifs à : pb de compilation/macro


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR