C, pb avec différentes versions de gcc á la compilation

C, pb avec différentes versions de gcc á la compilation - C - Programmation

Marsh Posté le 10-07-2008 à 11:30:29    

Bonjour,
 
je suis debutant en programmation. J'ai laborieusement ficelé un petit programme (sous fedora 5), que je compile avec gcc 4.1.1 ou 4.0.0, ok.
Seulement ce programme doit être envoyé sur un ordi isolé á 300 km (ssh) et compilé lá bas, cet ordinateur a gcc 2.96 (et j'ai aucune idée de son systéme) que j'utilise donc, mais cette fois j'ai plein de problémes á la compilation, notamment toutes les "variables undeclared". (alors que tout est nickel sous mes yeux avec gcc 4.1.1).
Il est hors de question de changer quoi que ce soit sur cet ordinateur. Auriez-vous une explication ?
 
merci, ce pb fait tout foirer !

Reply

Marsh Posté le 10-07-2008 à 11:30:29   

Reply

Marsh Posté le 10-07-2008 à 12:23:19    

peut être que les déclarations en plein code n'étaient pas encore supportées par la version 2.96 ?
essai de compiler avec l'option -std=c99 ou de coller quelques erreurs ici pour en savoir plus ?
a+

Reply

Marsh Posté le 10-07-2008 à 12:48:53    

Voici les erreurs,( ceci pour chaque variable préalablement déclarée) :
tilt_processM10.c: In function `main':
tilt_processM10.c:216: parse error before `char'
tilt_processM10.c:229: `E_upp' undeclared (first use in this function)
tilt_processM10.c:229: (Each undeclared identifier is reported only once
tilt_processM10.c:229: for each function it appears in.)
tilt_processM10.c:230: `E_nidur' undeclared (first use in this function)
...
J'ai essayé avec l'option -std=c99, sans succés.
 
 

Reply

Marsh Posté le 10-07-2008 à 12:51:54    

Montre ton code.


---------------
dap.developpez.com
Reply

Marsh Posté le 10-07-2008 à 12:57:46    

Le code :

 
Code :
  1. /*
  2. Specifics factors : for temperature correction
  3.  
  4. S_cal : Scale factor at T_cal
  5. T_cal : calibration temperature
  6. K_s : factor for temperature correction
  7. --> S : Scale factor corrected for temperature effect
  8. K_z :factor for temperature correction
  9. T: temperature at the measure
  10. V_t : measure volatage
  11. Theta_corr : measured angle corrected for temperature
  12. SV : convertion between bits and voltage
  13. --->
  14. S= S_cal.[1+K_s.(T-T_cal)]  --> the new scale factor corrected for temperature
  15. Theta_corr=S.V_t-K_z.(T-T_cal) --> the new angle corrected for temperature
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21. #include <unistd.h>
  22.  
  23.  
  24. /* ###########################################*/
  25. float S_cal=0.999;
  26. float T_cal=25; /*for the numbers 6208 and 6209 */
  27. float K_s=0.05/100;
  28. float K_z= 3; /*be careful with this value*/
  29. float SV=0.21; /* 1 bit = 0.210 mV */
  30. float ST=0.1; /*scale factor for temperature*/
  31.  
  32.  
  33. float convert (int value, int temp)
  34. {
  35. float angle;
  36. angle = (S_cal*(1+K_s*(SV*temp-T_cal)))*SV*value-K_z*(ST*SV*temp-T_cal);
  37. /*return the value in micro radian*/
  38. return angle;
  39.  
  40. }
  41.  
  42.  
  43. /* ###########################################*/
  44. void lecture (char *file_name,int *count,int *begin)
  45. {
  46.  
  47. FILE *fid;
  48.  
  49. char chaine[20];
  50. char id[20];
  51. int debut;
  52.  
  53.  
  54. if ((fid = fopen(file_name,"r" )) == NULL)
  55.     {
  56.     printf("\n Error: Impossible to read the file" );
  57.     }
  58. fscanf(fid,"%d",&debut);
  59. fscanf(fid,"%s",&id);
  60.  
  61. while (!feof(fid))
  62.     {
  63.     fscanf(fid,"%s",&chaine);
  64.     if (strcmp(chaine,id)==0) *count=*count-2;
  65.     *count=*count+1;
  66.     }
  67. *count=*count-1;
  68.  
  69. *begin=debut;
  70.  
  71. fclose(fid);
  72. }
  73. /* ########################################## */
  74. int lecture_temp (char *file_name,int *tab)
  75. {
  76. FILE *fid;
  77.  
  78. char chaine[20],s[20];
  79. char id[20];
  80. int debut,time;
  81. int i=0;
  82.  
  83. if ((fid = fopen(file_name,"r" )) == NULL)
  84.     {
  85.     printf("\n Error: Impossible to read the file" );
  86.     }
  87.  
  88. fscanf(fid,"%d",&debut);
  89. fscanf(fid,"%s",&id);
  90.  
  91. while (!feof(fid))
  92.     {
  93.     fscanf(fid,"%s",&chaine);
  94.     if (strcmp(chaine,id)==0) i--;
  95.     else
  96.         {
  97.         tab[i]=atoi(chaine);
  98.         i++;
  99.         }    
  100.     }
  101. fclose(fid);
  102. return i-1;
  103. }
  104.  
  105. /* ######################################*/
  106.  
  107. int lecture_data ( char *name,int sampl, int *temp,int begin_temp,int end,int *time_flag,float *OUT )
  108. {
  109.  
  110. FILE *fid;
  111.  
  112. int z1,z2,z3,z4,j=0,time,NB,data,NB_BLOCS=0,NB_DATA=0,MISS=0,NB_TOT=0;
  113. float value,max,min,sum;
  114. char chaine[20],id[8],s[20];
  115. long pos;
  116. int k=0;
  117. int indice=0,i=0,rest;
  118. int m=0;
  119.  
  120. if ((fid = fopen(name,"r" )) == NULL)
  121.     printf("\n Error: Impossible to read the file" );
  122.  
  123. printf(" \n reading file %s \n",name);
  124.  
  125.  
  126.  
  127.  
  128. z1=fscanf(fid,"%d",&time);
  129. z2=fscanf(fid,"%s",&id);
  130.  
  131. if (z1!=1||z2!=1) printf("\n format error (start of the file)" );
  132. rewind(fid);
  133.  
  134. if (begin_temp<time) /* i.e -> temperature starts at first */
  135.     {
  136.     i=((time-begin_temp)*4)/(4*sampl)+1;
  137.     k=i*sampl*4;/* -> nb of data to skip */
  138.     }
  139.  
  140. if (begin_temp>time) /* i.e -> data starts at first */
  141.     {
  142.     k=0;i=0;
  143.     }
  144. OUT[0]=k;m++;
  145. while (!feof(fid))
  146.     {
  147.     
  148.     NB=0;
  149.     sum=0;
  150.     while ((NB<4*sampl)&&(!feof(fid)))
  151.         {
  152.         pos=ftell(fid);
  153.         z3=fscanf(fid,"%d",&data);
  154.         if (z3==0)  /*i.e. its a id number*/
  155.             {
  156.             fseek(fid,pos,SEEK_SET);
  157.             fscanf(fid,"%s",&chaine);
  158.             if(strcmp(chaine,id)==0) NB_BLOCS++;
  159.              }
  160.  
  161.  
  162.         if (z3!=0 && data<time) /*its a data*/
  163.             {
  164.             NB_DATA++;NB_TOT++;
  165.             if (data<0) value=convert(-data,temp[k]);
  166.             if (data>=0) value=convert(data,temp[k]);
  167.             k++;NB++;
  168.             sum+=value;
  169.             if (k>end) break;
  170.             }
  171.         }
  172.     
  173.     
  174.     OUT[m]=sum/(NB);
  175.     i++;m++;
  176.     if(k>end) break;
  177.     }
  178.  
  179. fclose(fid);
  180.  
  181.  
  182.  
  183. printf("\n number of read data %d ",NB_TOT-1);
  184. printf("\n re-sampling rate : %d",sampl);
  185. printf("\n number of written data: %d",i);
  186. printf("\n number of data in the last block: %d",NB-1);
  187. printf("\n" );
  188. return m-1;
  189. }
  190.  
  191. void writing ( char *name, int *time_flag, float *data,int stop,int sampl )
  192.  
  193. {
  194. FILE *fout;
  195. int i,k=(int)data[0]/(4*sampl);
  196. char s[50];
  197. if ((fout = fopen(name,"w" )) == NULL)
  198.     printf("\n Error: Impossible to read the file" );
  199.  
  200. for (i=1;i<=stop;i++)
  201.     {
  202.     sprintf(s,"%d\t%f\n",time_flag[k+i]+sampl/2,data[i]);
  203.     fprintf(fout,"%s",s);
  204.     }
  205.  
  206. fclose(fout);
  207. }
  208.  
  209.  
  210.  
  211. /* ###########################################*/
  212.  
  213. int main (int argc, char **argv)
  214. {
  215. printf ("\n %s %s",argv[1],argv[2]);
  216.  
  217. char id[7],chaine[20];
  218. int time,data,i;
  219.  
  220. int sampl=300;
  221. int z1,z2,z3,z4;
  222.  
  223.  
  224. /*for files name */
  225. char name_temp[150],E_upp[150],E_nidur[150],N_upp[150],N_nidur[150];
  226. char Eu_out[50],En_out[50],Nu_out[50],Nn_out[50];
  227.  
  228. /*Creation of the strings where files names are strored */
  229. sprintf(E_upp,"%s/E_upp",argv[1]);
  230. sprintf(E_nidur,"%s/E_nidur",argv[1]);
  231. sprintf(N_upp,"%s/N_upp",argv[1]);
  232. sprintf(N_nidur,"%s/N_nidur",argv[1]);
  233. sprintf(name_temp,"%s/Hiti_tilts",argv[1]);
  234.  
  235. /*Creation of strings for outputs name */
  236. sprintf(Eu_out,"%s_E_upp",argv[2]);
  237. sprintf(En_out,"%s_E_nidur",argv[2]);
  238. sprintf(Nu_out,"%s_N_upp",argv[2]);
  239. sprintf(Nn_out,"%s_N_nidur",argv[2]);
  240.  
  241.  
  242. /* for files information */
  243. int begin_temp=0, size_temp=0;
  244.  
  245. lecture (name_temp,&size_temp,&begin_temp);
  246.  
  247. printf ("\n temp : %d %d", begin_temp,size_temp);
  248.  
  249. printf("\n\n" );
  250.  
  251.  
  252.  
  253.  
  254. /*for temperature data*/
  255. int *temp;
  256. temp= (int*)malloc(size_temp*sizeof(int)+1);
  257. int *time_flag;
  258. time_flag= (int*)malloc((size_temp/sampl+1)*sizeof(int)+1);
  259. /*temperature reading */
  260.  
  261. int end,truc=0;
  262. end=lecture_temp(name_temp,temp);
  263. i=1;
  264. time_flag[0]=begin_temp;
  265.  
  266. while (truc<size_temp)
  267.     {time_flag[i]=time_flag[i-1]+sampl;
  268.     truc=i*sampl;
  269.     i++;
  270.     }
  271.  
  272. float *E_u;
  273. E_u= (float*)malloc((truc+sampl)*4*sizeof(float));
  274. float *E_n;
  275. E_n= (float*)malloc((truc+sampl)*4*sizeof(float));
  276. float *N_u;
  277. N_u= (float*)malloc((truc+sampl)*4*sizeof(float));
  278. float *N_n;
  279. N_n= (float*)malloc((truc+sampl)*4*sizeof(float));
  280. int a,b,c,d;
  281.  
  282.  
  283. /* ###### end of declarations ##### */
  284.  
  285.  
  286. if (size_temp>0)
  287. {
  288. a=lecture_data (E_upp,sampl,temp,begin_temp,end,time_flag, E_u );
  289. b=lecture_data (E_nidur,sampl,temp,begin_temp,end,time_flag, E_n );
  290. c=lecture_data (N_upp,sampl,temp,begin_temp,end,time_flag, N_u );
  291. d=lecture_data (N_nidur,sampl,temp,begin_temp,end,time_flag, N_n );
  292.  
  293.  
  294.  
  295. writing(Eu_out,time_flag,E_u,a,sampl);
  296. writing(En_out,time_flag,E_n,b,sampl);
  297. writing(Nu_out,time_flag,N_u,c,sampl);
  298. writing(Nn_out,time_flag,N_n,d,sampl);
  299. }
  300. /* ########################################### */
  301.  
  302.  
  303. }
  

[edit: j'ai mis á jour  la mise en forme]
[edit2: cette fois c'est ok, compilable avec gcc 4.1.1 ]

 


Elmoricq-edit : balises code

Message cité 1 fois
Message édité par Elmoricq le 10-07-2008 à 17:07:16
Reply

Marsh Posté le 10-07-2008 à 15:00:41    

il manque un ';' à la ligne 186 déjà

Reply

Marsh Posté le 10-07-2008 à 15:26:04    

Je me suis un instant dit  que c'était juste cette boulette, super ; mais en fait le ´;` a juste été éjecté en écrivant le message.

Reply

Marsh Posté le 10-07-2008 à 16:05:38    

il y a eu une boulette lors de l'edit je pense
recompile de ton côté sur gcc 4.1
pour la mise en forme il ya les balises [cpp]

 


Message édité par djobidjoba le 10-07-2008 à 16:07:07
Reply

Marsh Posté le 10-07-2008 à 17:05:40    

XXeon a écrit :


[...]
void writing ( char *name, int *time_flag, float *data,int stop,int sampl )
 
{
[...]
[edit: j'ai mis á jour  la mise en forme]
[edit2: cette fois c'est ok, compilable avec gcc 4.1.1 ]


Si t'as encore des problèmes sur l'autre machine, supprime l'espace entre void et l'accolade. J'ai déjà vu des compilateurs se planter sur ce genre de détails.

Reply

Marsh Posté le 10-07-2008 à 17:18:45    

C´est fait.
Toujours le même probléme...

Reply

Marsh Posté le 10-07-2008 à 17:18:45   

Reply

Marsh Posté le 10-07-2008 à 17:30:23    

Dans main, mets voir le printf après les déclarations.
 
PS: pour une compilation rapide: cc tilt_processM10.c

Reply

Marsh Posté le 10-07-2008 à 17:51:25    

Merci á vous de jeter un oeil.
C'est fait, mais toujours pas moyen de compiler sur l'autre machine.

Reply

Marsh Posté le 10-07-2008 à 18:00:32    

Bon, déjà, c'est quoi les erreurs que tu obtiens (les mêmes que les précédantes ?).  
 
Si c'est le cas, compile ton programme avec -E, du genre :
gcc -E tilt_processM10.c
 
La compilation va s'arrêter à la phase de préprocessing.
 
Et regarde autour des lignes indiquées (fait attention, car ton programme va être beaucoup plus long), et éventuellement poste le morceau au alentour (pas tout le programme, puisqu'il va y avoir des milliers de lignes).

Reply

Marsh Posté le 10-07-2008 à 19:23:30    

ok, j'ai récupéré un long fichier .E , aprés je ne sais oú sont les "lignes indiquées". Je me documente, mais je ne comprends pas trés bien ce fichier..
(J'ajoute que le pb est toujours que toutes les variables sont "undeclared" avec gcc 2.96 sur l'autre machine)


Message édité par XXeon le 10-07-2008 à 19:27:13
Reply

Marsh Posté le 11-07-2008 à 11:25:33    

Avec l'option -E, tu bâtis ton code avec le code utile des fichiers "include" et bibliothèques externes. Et si j'ai bien compris, il y a pas eu d'erreur.
 
Bon maintenant supposons que l'autre machine est en ANSI C strict. Fais gcc -pedantic tilt_processM10.c
 
Et tu obtiens:  
tilt_processM10.c: In function ‘main’:
pruef.c:217: warning: ISO C90 forbids mixed declarations and code
 
Pour corriger, tu dois mettre toutes les déclarations de variables avant le code.

Code :
  1. int main (int argc, char **argv)
  2. {
  3.   char id[7],chaine[20];
  4.   int time,data,i;
  5.   int sampl=300; 
  6.   int z1,z2,z3,z4;
  7.    int begin_temp=0, size_temp=0;
  8.   int end,truc=0;
  9.   int *temp;
  10.   int *time_flag;
  11.   float *E_u;
  12.   float *E_n;
  13.   float *N_u;
  14.   float *N_n;
  15.   int a,b,c,d;
  16.   /*for files name */
  17.   char name_temp[150],E_upp[150],E_nidur[150],N_upp[150],N_nidur[150];
  18.   char Eu_out[50],En_out[50],Nu_out[50],Nn_out[50];
  19.   printf ("\n %s %s",argv[1],argv[2]);
  20. Etc...

Reply

Marsh Posté le 11-07-2008 à 12:56:44    

Trés bien, ca fonctionne. C'était aussi bête que ca, merci.
Et moi, j'ai encore un long chemin á faire en programmation...
 
edit: Cela dit, sur l'autre machine ca compile mais le prog échoue, je creuse.


Message édité par XXeon le 11-07-2008 à 14:56:11
Reply

Marsh Posté le 11-07-2008 à 15:53:40    

Euh... je tiens à te rassurer sur un point. En 7 ans de carrière, je n'ai eu qu'une seule fois ce problème et il est tout à fait possible qu'un développeur ne le rencontre jamais. C'est un problème très rare.

Reply

Sujets relatifs:

Leave a Replay

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