Problèmes portage GCC vers Visual Studio - C - Programmation
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++
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
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. |
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.
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 ...)
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...
Marsh Posté le 25-08-2007 à 11:32:53
tpierron a écrit : |
n''importe quoi
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 |
Marsh Posté le 25-08-2007 à 12:39:59
XK 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. ton erreur est ailleurs (et de toute façon, les variables globales c'est mal)
compilé avec VS 2005 :
Code :
|
sortie :
Citation :
|
donc bon, la norme elle a bon dos hein...
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.
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 :
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 :
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
Message édité par XK le 24-08-2007 à 21:14:33