Problèmes portage GCC vers Visual Studio

Problèmes portage GCC vers Visual Studio - C - Programmation

Marsh Posté le 24-08-2007 à 21:02:44    

Bonjour
 
J'ai un programme Win32 que j'avais développé sous DevC++ 5 que je souhaite porter sous Visual Studio 2005 Express.
J'ai installé le Platform SDK pour avoir toutes les bibliothèques et j'ai créé un projet dans lequel j'ai mis mes sources.
J'ai essayé de compiller mais j'ai des centaines de warning et d'erreur, j'ai donc du boulot.
 
Pour commencer voici un bout de code :

Citation :

DWORD WINAPI Trace(void *thread_id) {
  int tid = (int)thread_id;
  Point3 portPoint;
 
  while(1)
  {          
      WaitForSingleObject(m2Thread[tid],INFINITE);
       
      portPoint.x = gt.firstPortX;
      portPoint.y = gt.firstPortY - (tid*gt.portYIncr);
   portPoint.z = gt.port.z;
      int screenX, screenY;
 
      for (screenY = tid;  
           screenY < SCREEN_HEIGHT;  
           screenY += NUM_THREADS, portPoint.y -= (gt.portYIncr*NUM_THREADS)) {
              portPoint.x = gt.firstPortX;
 ...


Donne les erreurs :

Citation :

error C2143: erreur de syntaxe : absence de ';' avant 'type'
error C2065: 'screenY' : identificateur non déclaré
error C2065: 'screenX' : identificateur non déclaré


Et c'est à peu près comme ça dans tout le reste du programme...
J'ai un problème avec les types? Comment le résoudre?
Merci :hello:


Message édité par XK le 24-08-2007 à 21:14:33
Reply

Marsh Posté le 24-08-2007 à 21:02:44   

Reply

Marsh Posté le 24-08-2007 à 22:54:55    

Finalement j'ai finis par trouver : il faut déclarer les variables locales au début de chaque fonction.
Etrange tout de même qu'il soit impossible de déclarer en cours de route avec VC++ :heink:
 
Du coup j'ai une variable que je ne sais pas initialiser et il semble n'y avoir que ça pour faire buguer le programme :(

Reply

Marsh Posté le 24-08-2007 à 23:23:39    

XK a écrit :

Finalement j'ai finis par trouver : il faut déclarer les variables locales au début de chaque fonction.
Etrange tout de même qu'il soit impossible de déclarer en cours de route avec VC++ :heink:


 
L'initialisation des variables en milieu de fonction fait partie de la norme ISO C99. Ce n'est un secret pour presque personne que Visual C n'implémente qu'une petite partie de cette norme. Et vu que MS s'est lancé à fond les manettes dans C#, il inutile d'attendre la moindre amélioration à ce niveau.

Reply

Marsh Posté le 24-08-2007 à 23:33:13    

Le fait que ta variable gt soir à première vue non declarée ca gène pas par hasard plutot tu crois pas ?

 

(sans les numeros de ligne facile de faire dire ce que l'on veux aux 3 lignes d'erreurs, et faire porter la responsabilité au compilo soit disans si irrespectueux des normes ...)


Message édité par VisualC++ le 24-08-2007 à 23:33:47
Reply

Marsh Posté le 25-08-2007 à 11:14:35    

"gt" une une variable globale, ce n'est pas elle qui posait problème. J'ai mis toutes mes déclarations (locales je précise) en début de fonction et ça roule!
 
Merci pour l'info tpierron, c'est dommage que M$ ne respecte pas la norme car je trouve le compilateur plutot optimisé par rapport à GCC. Je ne sais pas si je pourrais obtenir de meilleurs résultats avec le compilo Intel qui lui n'est pas gratuit.
 
Dans VC++ l'optimisation SSE2 avec une virgule flotante précise divise par 2 la vitesse du programme par rapport à "fast", je suppose que ça prend beaucoup plus de cycles d'horloge pour effectuer les mêmes calcules en pleine précision.
Le compilo Intel est peut être plus fort pour ce genre d'optimisations et il supporte sans doutes le SSE3...

Reply

Marsh Posté le 25-08-2007 à 11:32:53    

tpierron a écrit :


 
L'initialisation des variables en milieu de fonction fait partie de la norme ISO C99. Ce n'est un secret pour presque personne que Visual C n'implémente qu'une petite partie de cette norme. Et vu que MS s'est lancé à fond les manettes dans C#, il inutile d'attendre la moindre amélioration à ce niveau.


n''importe quoi

Reply

Marsh Posté le 25-08-2007 à 12:10:03    

XK a écrit :

J'ai mis toutes mes déclarations (locales je précise) en début de fonction et ça roule!


Bref t'as écrit du code C comme l'impose la norme et ça roule. C'est plutôt normal. Petite précision => les variables ne sont pas à déclarer en début de fonction mais en début de bloc (subtile nuance...)
 

Harkonnen a écrit :

n''importe quoi


[:rofl]

Message cité 1 fois
Message édité par Sve@r le 25-08-2007 à 12:17:21

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

Marsh Posté le 25-08-2007 à 12:39:59    

XK a écrit :


Merci pour l'info tpierron, c'est dommage que M$ ne respecte pas la norme car je trouve le compilateur plutot optimisé par rapport à GCC. Je ne sais pas si je pourrais obtenir de meilleurs résultats avec le compilo Intel qui lui n'est pas gratuit.


non mais ce sont des conneries hein ! le compilateur de VC++ 2003 et postérieurs est un de ceux qui respectent le mieux la norme. ton erreur est ailleurs (et de toute façon, les variables globales c'est mal)

 

compilé avec VS 2005 :

Code :
  1. #include <stdio.h>
  2.  
  3. void test(void);
  4.  
  5. int main(int argc, char* argv[])
  6. {
  7.     test();
  8.     return 0;
  9. }
  10.  
  11. void test(void)
  12. {
  13.     printf("début du test\n" );
  14.     int a = 0;
  15.     while (a<5)
  16.     {
  17.         int x = 3;
  18.         printf("x=%d\n",x);
  19.         a++;
  20.     }
  21. }
 

sortie :

Citation :


début du test
x=3
x=3
x=3
x=3
x=3


donc bon, la norme elle a bon dos hein... :sarcastic:

 



:D

Message cité 1 fois
Message édité par Harkonnen le 25-08-2007 à 12:49:46
Reply

Marsh Posté le 25-08-2007 à 12:51:37    

Harkonnen a écrit :

non mais ce sont des conneries hein ! le compilateur de VC++ 2003 et postérieurs est un de ceux qui respectent le mieux la norme.


La norme C90, oui. Pour C95 (wchar_t etc.) j'ai des doutes... Quand à C99/C05, c'est carrément non.

 


Message édité par Emmanuel Delahaye le 25-08-2007 à 12:52:43

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

Sujets relatifs:

Leave a Replay

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