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

  FORUM HardWare.fr
  Programmation
  C

  Problèmes portage GCC vers Visual Studio

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problèmes portage GCC vers Visual Studio

n°1603808
XK
Posté le 24-08-2007 à 21:02:44  profilanswer
 

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
mood
Publicité
Posté le 24-08-2007 à 21:02:44  profilanswer
 

n°1603843
XK
Posté le 24-08-2007 à 22:54:55  profilanswer
 

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

n°1603867
tpierron
Posté le 24-08-2007 à 23:23:39  profilanswer
 

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.

n°1603871
VisualC++
J'va y penser ...
Posté le 24-08-2007 à 23:33:13  profilanswer
 

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
n°1603915
XK
Posté le 25-08-2007 à 11:14:35  profilanswer
 

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

n°1603918
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 25-08-2007 à 11:32:53  profilanswer
 

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

n°1603927
Sve@r
Posté le 25-08-2007 à 12:10:03  profilanswer
 

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.
n°1603930
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 25-08-2007 à 12:39:59  profilanswer
 

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
n°1603933
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-08-2007 à 12:51:37  profilanswer
 

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/

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

  Problèmes portage GCC vers Visual Studio

 

Sujets relatifs
lien d'un flash vers un autre[Qt Jambi] Problèmes de scintillement
Visual 2005 - faire un exe avec le code source d'un prog d'echecsportage d'un driver windows en qnx besoin d'aide urgent
[HTML] Création de mon site: les problèmes.incompatibilitées de versions, problèmes en pagaille
Connextion à un annuaire LDAP (VBA vers VBS)Applications financieres sous excel en Visual Basic
Update d'un champ txt vers un champs datePassage de variables d'un module vers un userform
Plus de sujets relatifs à : Problèmes portage GCC vers Visual Studio


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