portée indices de boucle

portée indices de boucle - C++ - Programmation

Marsh Posté le 24-07-2006 à 23:53:54    

Salut tout le monde, je me pose une petite question, il se trouve que lorsque je fais un truc du genre :
 

Code :
  1. for(int i=0; i<10; i++){
  2. blabla...
  3. }
  4. for(int i=0; i<5; i++){
  5. blibli...
  6. }


 
VisualC++ me dit qu'il y a une erreur, comme quoi i est déclaré 2 fois, donc il veut que j'enlève le "int" de la 2ème boucle quoi.
 
Ok je l'enlève, ça compile, s'exécute niquel, maintenant je teste mon code sous devC++, et lui me met une erreur lorsqu'il n'y a pas le "int" de la 2ème boucle...
 
Hors je pense que DevC++ a raison, puisque selon la norme la portée de l'indice de boucle n'est plus valable hors de la boucle quand on le déclare comme ça non ?
 
Alors qui faut-il croire ? VisualC++ raconterait-il des conneries ?
 
Parceque du coup je vais changer mon code comme ça mais bon, ça fait très "C" :d :

Code :
  1. int i;
  2. for(i=0; i<10; i++){
  3. blabla...
  4. }
  5. for(i=0; i<5; i++){
  6. blibli...
  7. }


Message édité par Zipo le 24-07-2006 à 23:54:25
Reply

Marsh Posté le 24-07-2006 à 23:53:54   

Reply

Marsh Posté le 24-07-2006 à 23:57:04    

ta version de VC++ ne respecte pas la norme. Mets à jour. Remarque, j'y connais rien, il y a peut-être un pragma pour régler ça.

Reply

Marsh Posté le 25-07-2006 à 00:21:47    

ok c'est bien ce que je pensais, merci pour ta réponse rapide :jap:

Reply

Marsh Posté le 25-07-2006 à 09:42:25    

A ce propos, il faut noter que le code suivant compile sous visual 2003 (un ";" peut etre très pénible à trouver ...), je tire ça du code d'un collègue qui ne comprenait rien àu comportement de son programme, et le debugger n'a pas pu l'aider à trouver la faute:

Code :
  1. #include "stdafx.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. for (int i = 0 ; i<10 ; i++);
  5.  std::cout <<i;
  6. }


 
La sortie de ce code est :

Citation :

10


 
Ca nous a pas trop paru normal que cela compile, et on a pas cherché plus loin ...

Reply

Marsh Posté le 25-07-2006 à 12:47:20    

Sous VC7.1 et + (peut-etre sous le 7.0) mettre l'option "Conformité pour la portée d'une boucle For" qui rajoute l'option /ZC:forScope à la compilation.

 

Edit : option présente dans les propriétés de ton projet sous la rubrique C/C++


Message édité par Fullblaster le 25-07-2006 à 12:49:21
Reply

Marsh Posté le 25-07-2006 à 13:34:31    

rhâ super, merci beaucoup :jap:

Reply

Marsh Posté le 25-07-2006 à 13:47:10    

_darkalt3_ a écrit :

A ce propos, il faut noter que le code suivant compile sous visual 2003 (un ";" peut etre très pénible à trouver ...), je tire ça du code d'un collègue qui ne comprenait rien àu comportement de son programme, et le debugger n'a pas pu l'aider à trouver la faute:

Code :
  1. #include "stdafx.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. for (int i = 0 ; i<10 ; i++);
  5.  std::cout <<i;
  6. }


 
La sortie de ce code est :

Citation :

10


 
Ca nous a pas trop paru normal que cela compile, et on a pas cherché plus loin ...


 
Pourquoi tu voudrais que ça ne compile pas?

Reply

Marsh Posté le 25-07-2006 à 13:48:24    

parce que la portée de 'i' est censée être dans la boucle for. Or, j'y fais appel en dehors.

Reply

Marsh Posté le 25-07-2006 à 13:49:41    

_darkalt3_ a écrit :

parce que la portée de 'i' est censée être dans la boucle for. Or, j'y fais appel en dehors.


Ha oui ok, effectivement. M'en suis rendu compte après avoir posté  :)

Reply

Marsh Posté le 25-07-2006 à 13:53:28    

Vraiment très pas évident , ces ';' en fin de 'for' :D

Reply

Sujets relatifs:

Leave a Replay

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