[resolu]mega probleme sous visual SOS... SOS...

mega probleme sous visual SOS... SOS... [resolu] - C++ - Programmation

Marsh Posté le 23-08-2005 à 13:49:28    

Bonjour tout le monde
 
J'ai un probleme tres important, ceci est un véritable appel de detresse !
 
Sans trop rentrer dans les detail, je debute, et je suis en periode d'essai pour un job de dev C++ avec pour outils visual. La boite pour qui je bosse est en vacance et j'ai un job à rendre pour la "rentrée". Le code qu'on m'a filé a été fait sous visual 7.1 or moi j'ai la 7.0 donc impossible d'ouvrir le projet  :( .
 
Pour pallier le probleme j'ai recupéré visual studio 2005, mais visiblement le compilateur est plus titilleux que les versions precedante, et voici là ou je bloque actuellement :  
 
j'ai une fonction de ce genre :  
 
int Fontion()
{
  for(int i=0 ; i< blabla; i++)
  {
     //code quelquonque
  }
  return i;
}
 
Et le compilateur me retourne une fatal error : error C2065: 'i' : undeclared identifier
 
J'imagine que l'on peut parametrer le compilateur pour qu'il ne soit pas aussi rigoureux, mais je n'ai ABSOLUMENT aucune idée de comment on peut faire.
 
Quelqu'un pourrait il m'aider par pitié, c'est vraiment tres important !!!
 
En vous remerciant tous mille fois d'avance pour votre aide... (3 jours que je cherhe des solutions et tourne en rond  :( )


Message édité par giova le 27-08-2005 à 23:43:52
Reply

Marsh Posté le 23-08-2005 à 13:49:28   

Reply

Marsh Posté le 23-08-2005 à 13:50:41    

oh j'oubliais : je ne peux pas toucher au code, mon boulot est de le commenter uniquement. Mais j'ai besoin de pouvoir le compiler pour pouvoir bien le comprendre et ne pas ecrire de conneries.
 
merci encore.

Reply

Marsh Posté le 23-08-2005 à 14:08:13    

Sous VC++ 7.1 aussi ce code ne compile pas si l'option de compatibilité VC++ 6 n'est pas activée.
Ce code est invalide. C'est une bonne chose qu'il ne compile pas.
C'est contrôlé par l'option /Zc:forScope, qui est désactivée par défaut sous VC++ 7.1, et activée sous VC++ 8, ce qui explique qu'il râle. Sous VC++ 7.1 ça se change dans les options du projet, C/C++->langue:"conformité forcée dans la portée d'une boucle For".
Ca doit pas être très éloigné dans VC++ 8.
Voir aussi #pragma conform
http://msdn.microsoft.com/library/ [...] onform.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 23-08-2005 à 14:21:20    

HelloWorld a écrit :


Ce code est invalide. C'est une bonne chose qu'il ne compile pas.


Ah ben merde, moi j'les fais tous comme ça [:ocube]
C'est quoi qui va pas dans ce phrasé?  

Reply

Marsh Posté le 23-08-2005 à 14:27:28    

godbout a écrit :

Ah ben merde, moi j'les fais tous comme ça [:ocube]
C'est quoi qui va pas dans ce phrasé?


 
int Fontion()  
{  
  int i;
  for(i=0 ; i< blabla; i++)  
  {  
     //code quelquonque  
  }  
  return i;  
}  
 
Sortir la variable i du scope de la boucle for pour qu'elle soit
encore connue au moment du return

Reply

Marsh Posté le 23-08-2005 à 15:06:43    

Ah ouais, évidemment, j'avais pas fait gaffe au return [:ocube]

Reply

Marsh Posté le 23-08-2005 à 15:09:52    

Merci mille fois HelloWord, oui l'option etait bien là ou tu disais sur visual 2005 beta, ce probleme est résolu.
 
Par contre (ca me saoule, je ne veux pas faire l'assisté, mais vraiment ca touche aux options du compilateur et je n'y connais rien, donc je bloque complet) j'ai un autre probleme du meme ordre :  
 
j'ai une fonction déclarée en public:  
 

Code :
  1. short CImageBox::PostProcess(BYTE * p_buf)


 
et quand dans le code j'ai un  
 

Code :
  1. if(pDlg->PostProcess)//blablabla


 
le compilateur le jete, et là je ne comprends vraiment pas quel est son probleme, voici son message :  
 

Code :
  1. error C3867: 'CImageBox::PostProcess': function call missing argument list; use '&CImageBox::PostProcess' to create a pointer to member


 
c'est la derniere erreur redondante qui me bloque (enfin j'espere :( )
 
Merci encore


Message édité par giova le 23-08-2005 à 15:10:45
Reply

Marsh Posté le 23-08-2005 à 15:13:31    

giova a écrit :


 
[

Code :
  1. if(pDlg->PostProcess)//blablabla


 


 
Essaye plutôt if(pDlg->PostProcess())//blablabla

Reply

Marsh Posté le 23-08-2005 à 15:26:25    

mais je ne pourrai pas puisque si tu regarde la déclaration, il faut un argument de type pointeur sur BYTE, d'ailleur je ne comprends meme pas comment ca a pu compiler avant.. HHmmm il y a vraiment un truc qui m'echappe je vais etudier tout ca de plus pres.

Reply

Marsh Posté le 23-08-2005 à 15:31:02    

Pfff c'est demoralisant un code aussi degueulasse absolument pas structuré, absolument pas commenté, pour débuter, c'est vraiment HARDCORE !!! :(
 
ca donne envie de le balancer a la poubelle...
 
Bon... vais aller prendre l'air pour me ressaisir...

Reply

Marsh Posté le 23-08-2005 à 15:31:02   

Reply

Marsh Posté le 23-08-2005 à 16:02:25    

Quand j'ai lu:

Citation :

je ne peux pas toucher au code, mon boulot est de le commenter uniquement


Je me suis dit : le pauvre. Les mecs se retrouvent avec un code de merde que personne peut comprendre, alors ils ont filé ça à un pauvre gars. Elle dure combien de temps ta période d'essai ?
Sinon ça m'est arrivé pour mon premier stage. Avec le recul ça été une bonne expérience, j'ai été très sensibilisé sur la lisibilité du code. Mais sur le moment, oui, c'est éprouvant...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 23-08-2005 à 16:27:33    

Je voudrais quand même éclaircir un point. Si j'ai bien compris, le code
 

Code :
  1. int Fontion() 
  2.   for(int i=0 ; i< blabla; i++) 
  3.   { 
  4.      //code quelquonque   
  5.   } 
  6.   return i; 
  7. }


 
fonctionne sous Visual C++ 6.0 mais pas sous Visual C++ 7.0?
 
Faut-il adopter la seconde écriture (int i sorti de la boucle) si on veut améliorer la pérénité de son code?
 
De même ce code se compile t-il sous Visual C++ 7.0:

Code :
  1. int Fontion() 
  2. {
  3.   for(int i=0 ; i< blabla; i++) 
  4.   { 
  5.      //code quelquonque   
  6.   }
  7.   for(i = 0 ; i < blabla_again ; i++)
  8.   {
  9.   }
  10.   return i; 
  11. }


Message édité par slash33 le 23-08-2005 à 16:28:50
Reply

Marsh Posté le 23-08-2005 à 17:27:37    

HelloWorld> jusqu'à mi-septembre, et c'est exactement ce que tu dis, d'autant plus que le seul developpeur va se barrer en octobre, tu vois le topo.
 
mais bon, je m'en fous, ca me fait une experience professionnelle sur un soft assez pointu en plus (traitement d'images), puis qui sait... si je suis le seul apres a avoir le soft en tete meme en l'ayant documenté (sachant que tout part dans tous les sens, aucune structure, y a pas eu de phase se conception, ca se voit, ca a été du rajout permanent puis tu ficelage pour que ca ne bug pas...

Reply

Marsh Posté le 23-08-2005 à 17:30:51    

Si on te fait documenter le source c'est à priori pour que d'autres puissent le maintenir...

Reply

Marsh Posté le 23-08-2005 à 17:33:34    

slash> en fait je pense que tout simplement le compilateur considere que i pourrait ne pas etre déclarré si la condition du for fait que... et comme il est possible que pour optimiser le code, il fasse sauter un for dont la condition sera fausse des la premiere boucle, il ne prend pas de risque et dit non.
 
enfin c'est comme ca que je l'imagine...

Reply

Marsh Posté le 23-08-2005 à 17:41:44    

En fait ne te prend pas la tête. Il faut prendre à la lettre ce que j'écris. Donc je sais que le code que j'ai passé en exemple compile sous Visual C++ 6.0 puisque je code de cette façon depuis cinq ans.
 
Ma question est donc simple (et s'adresse aux développeurs Visual 7.0 et 7.1 expérimentés): est-ce que je code à tord mes boucles for et doit donc rectifier le tir pour faciliter le portage de mon code?

Reply

Marsh Posté le 23-08-2005 à 17:46:34    

Citation :

Faut-il adopter la seconde écriture (int i sorti de la boucle) si on veut améliorer la pérénité de son code?


Faut abandonner VC++ 6. Sinon y'a une astuce avec le préprocesseur.

Code :
  1. #ifndef for
  2. #define for if (0) {} else for
  3. #endif


http://www.boost.org/more/microsoft_vcpp.html
 
VC++ 6 est sorti avant la norme C++, en 98. On est en 2005, son support se termine complètement le mois prochain, et la version 8 arrive... il a fait son temps.
Je crois que /Zc:forScope a été introduit avec VC++ 7.1.
 
giova> j'espère juste que tu seras effectivement embauché après leur avoir fait le sale boulot.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 23-08-2005 à 17:54:20    

HelloWorld a écrit :

Citation :

Faut-il adopter la seconde écriture (int i sorti de la boucle) si on veut améliorer la pérénité de son code?


Faut abandonner VC++ 6. Sinon y'a une astuce avec le préprocesseur.

Code :
  1. #ifndef for
  2. #define for if (0) {} else for
  3. #endif


http://www.boost.org/more/microsoft_vcpp.html


Ha oui effectivement l'astuce qui tue...
 
Abandonner VC++ 6.0 pourquoi pas mais je prend quoi à la place sachant que l'IDE doit être entièrement gratuit? Et je veux conserver un éditeur de ressources qui tienne la route, je fais trop d'interfaces pour m'en passer. :o  
 

HelloWorld a écrit :

giova> j'espère juste que tu seras effectivement embauché après leur avoir fait le sale boulot.


+1 quoi que si tu dois assurer la maintenance après avoir documenté le code...  :whistle:

Reply

Marsh Posté le 24-08-2005 à 09:49:05    

Citation :

Abandonner VC++ 6.0 pourquoi pas mais je prend quoi à la place sachant que l'IDE doit être entièrement gratuit? Et je veux conserver un éditeur de ressources qui tienne la route, je fais trop d'interfaces pour m'en passer


VC++ 6 est pas gratuit. Y'aura une version express de VC++ 8. Je sais pas trop ce que ça implique niveau tarif (gratuité, prix faible, ???), on sera fixés bientôt.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-08-2005 à 12:02:22    

VC++ 6 est obsolète.
il est pas au standard, et dès que tu veux faires des templates ça merde, même avec le dernier SP, et ne sera plus jamais suivi.
 
----
 
perso comment je commenterai:
 
"ça c'est une pratique obsolète, non portable, VC6 only"
"ça c'est exploitable"
"ça c'est laid"
"ça ça compile pas"
"le programmeur était-il conscient de ce qu'il écrit ?"
"impossible de déterminer l'intention du code"
"ça marche par la force du saint-esprit, code qui s'auto-exploite".
"construction générale fragile"
 
ce genre de commentaires, je le poses dans les projets sur lesquels je bosses au niveau taf.
pourquoi ? je remplaçes un mec qui a appris le C/C++ sur le tas dans la boite, qui a bricolé sur des softs malfoutus, qui ont été écrits sous DOS, portés sous Win3.1 puis sous 95.
bref là je fais de l'archéologie informatique, je suis donc tombé sur des perles rares, style:
 
"je sais pas me servir de malloc/realloc/free, et la STL et les templates t'oublies:
 
a) alors je prends un fichier ini, je lit une valeur j'en écrit une dedans, j'appelles une fonction, elle lit la valeur dans l'ini, elle en actualise une autre, au retour la fonction appellante relit la valeur de l'ini.
 
b) a quoi ça sert de conserver les infos ? bin non tiens je vais m'éclater a chaque fois que j'ai un traitement a faire, je vais tout perdre avec des fuites (sinon c'est moins drôle), relire des collections de données/valeurs avec notion de structuration/arborescence depuis des fichiers .ini (qui sont absolument pas adapté à ça, donc je vais utiliser un maximum de marqueurs laids au possible), et le tout avec aucun tests d'echec ce qui provoque des boucles sans fin quand il manque une entrée"
 
c) c'est quoi les dépassements de tampon ? chez moi un:
CString Val("AB" );
char bidule[2];
strcpy( bidule, Val );
marche très bien, et ce depuis 4 ans, c'est quoi le problème ?
 
d) tiens j'ai découvert les MFC, c'est vrai que CString ça a de la classe.
mais finalement, strcpy/strcat a tour de bras, ça fait vachement plus 3l33t, alors entre deux CString, je vais en caser..... (les opérateurs c'est pour les tarlouzes)

"
 
----
 
autrement dit, vis à vis du code qu'ils t'ont filés, il y a certainements des horreurs involontaires, et des horreurs volontaires pour voir si tu suis. il ne faut pas que tu sois spécialement tendre, si c'est merdique c'est merdique.
 
par exemple le coup du "if(pDlg->PostProcess)", soit c'est un test, soit il y a sérieursement un problème de revue de code (même personnel de la part du codeur) dans leur boite.... ( comme c'est dans la mienne  [:ddt] )


Message édité par bjone le 24-08-2005 à 12:06:31
Reply

Marsh Posté le 27-08-2005 à 23:32:06    

bjone, ton post m'a bien fait rire (j'en ris encore) car tu n'es pas loin de la vérité (c'est pire) des trucs allucinants, un programmeur du dimanche aurait fait mieux !!! dire que c'est un ingenieur qui a fait ca, non vraiment j'hallucine.
 
T'inquiete pas, mes commentaires j'ai vite décidé de ne plus etre tendre avec, marre de m'arracher les cheveux sur un code qu'on déroule comme un papier cul qui a deja servit. Je suis obligé de ne pas etre tendre, parceque :  
 
1) forcement on va TRES RAPIDEMENT bloquer et ne plus pouvoir faire évoluer le code (seul celui qui l'a créé serait d'ailleur capable de le faire évoluer, et vu qu'il part...)
 
2) apres on va croire que c'est moi qui ne suis pas capable de lire un code C++
 
mais bon je n'emploi pas tout a fait la meme methode que toi, je met en commentaire des questions, dont la réponse met en evidence le (c'est indefinissable) bricolage bordelique dépourvu de toute logique tenant au miracle si ca fonctionne ;) ( a condition que l'on soit dans des conditions parfaites, de reve, cad, aucune exception, cas special, le client est bien sage et fait excatement ce qu'il faut faire, le matos suit parfaitement, etc...  :whistle: )
 
PS : j'ai été obligé de recuperer la 7.1, le compilateur en 8.0 etait completement fou (ce qui est tout à fait normal vu la gueule du code, si vous saviez....)
 
Merci encore a vous tous en tout cas, maintenant "ca va aller"... :D


Message édité par giova le 27-08-2005 à 23:41:18
Reply

Marsh Posté le 28-08-2005 à 23:57:06    

heureusement le mec qui était avant moi n'était pas ingé.  
en même temps c'était pas de sa faute, il était initialement pas là pour ça (enfin je crois), a appris sur le tas, et n'avait pas de référentiel valable, puisque tout ce qui avait été fait avant lui était du même acabi.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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