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

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1757777
XXeon
Posté le 10-07-2008 à 11:30:29  profilanswer
 

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 !

mood
Publicité
Posté le 10-07-2008 à 11:30:29  profilanswer
 

n°1757821
djobidjoba
Posté le 10-07-2008 à 12:23:19  profilanswer
 

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+

n°1757831
XXeon
Posté le 10-07-2008 à 12:48:53  profilanswer
 

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.
 
 

n°1757832
dap++
Script kiddie
Posté le 10-07-2008 à 12:51:54  profilanswer
 

Montre ton code.


---------------
dap.developpez.com
n°1757836
XXeon
Posté le 10-07-2008 à 12:57:46  profilanswer
 

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
n°1757924
djobidjoba
Posté le 10-07-2008 à 15:00:41  profilanswer
 

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

n°1757939
XXeon
Posté le 10-07-2008 à 15:26:04  profilanswer
 

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.

n°1757963
djobidjoba
Posté le 10-07-2008 à 16:05:38  profilanswer
 

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
n°1758023
ogaby
Posté le 10-07-2008 à 17:05:40  profilanswer
 

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.

n°1758032
XXeon
Posté le 10-07-2008 à 17:18:45  profilanswer
 

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

mood
Publicité
Posté le 10-07-2008 à 17:18:45  profilanswer
 

n°1758045
ogaby
Posté le 10-07-2008 à 17:30:23  profilanswer
 

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

n°1758061
XXeon
Posté le 10-07-2008 à 17:51:25  profilanswer
 

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

n°1758065
tpierron
Posté le 10-07-2008 à 18:00:32  profilanswer
 

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).

n°1758097
XXeon
Posté le 10-07-2008 à 19:23:30  profilanswer
 

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
n°1758315
ogaby
Posté le 11-07-2008 à 11:25:33  profilanswer
 

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...

n°1758361
XXeon
Posté le 11-07-2008 à 12:56:44  profilanswer
 

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
n°1758532
ogaby
Posté le 11-07-2008 à 15:53:40  profilanswer
 

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.


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

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

 

Sujets relatifs
C++ et Oracle sans ODBC ni JDBCComment coder bool en C
Inclusion de resources C/C++Connexion LDAP C++
[C] Fournir un projet compilé sous Visual C++ à un amiUtilisation dll .net dans une application C++ Visual Studio 6
aide pour un bootloader en C sur pic32XML_C++
[C#] Analyser des trames udp sur pocket pcDemande d'aide pour programmation en C
Plus de sujets relatifs à : C, pb avec différentes versions de gcc á la compilation


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