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

  FORUM HardWare.fr
  Programmation
  C++

  Pro du C requi : question sur les variables initalisées dans un for

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pro du C requi : question sur les variables initalisées dans un for

n°301369
Deadog
Dain Bramaged
Posté le 04-02-2003 à 21:14:01  profilanswer
 

J'avais lu, ici même, y'a pas mal de temps, que les variables initialisées dans un for (cad celles avant le premier ; ) devait être réinitialisé à l'état quel avait avant.
Ct au compilo de faire ça
 
expl :
 
i=3;
for (i=0 ; i<=6 ; i++);  
printf("%d\n", i); // Renvoie 3 et pas 6
 
spa la penne d'essayer de tester si c vrai ou pas, très peu de compilo le font, ou au moins le font systèmatiquement [:spamafote]
 
 
est-ce donc vrai finallement ? :??:


Message édité par Deadog le 04-02-2003 à 21:17:24
mood
Publicité
Posté le 04-02-2003 à 21:14:01  profilanswer
 

n°301374
thenutskil​ler
1+1=3
Posté le 04-02-2003 à 21:29:33  profilanswer
 

Le i du for n'a que la portée du for. Tu affiches donc le i qui a la portée de ton prog, cleui = à 3.

n°301379
Deadog
Dain Bramaged
Posté le 04-02-2003 à 21:34:08  profilanswer
 

donc c vrai, c ça ? :)

n°301380
thenutskil​ler
1+1=3
Posté le 04-02-2003 à 21:35:17  profilanswer
 

Oui, je pense...

n°301381
Willyzekid
Posté le 04-02-2003 à 21:35:38  profilanswer
 

Non...le compilateur ne fait rien, il ne reinitialise rien du tout. Tes deux "i" sont 2 variables différentes...(dans des blocs de code différents).
Suis pas sûr d'être clair...
 

Code :
  1. 3 If  the  for-init-statement is a declaration, the scope of the name(s)
  2.   declared extends to the end of the for-statement.  [Example:
  3.           int i = 42;
  4.           int a[10];
  5.           for (int i = 0; i < 10; i++)
  6.                   a[i] = i;
  7.           int j = i;        // j = 42
  8.    --end example]


Message édité par Willyzekid le 04-02-2003 à 21:36:45

---------------
Horizon pas Net, reste à la buvette!!
n°301383
kadreg
profil: Utilisateur
Posté le 04-02-2003 à 21:36:03  profilanswer
 

thenutskiller a écrit :

Le i du for n'a que la portée du for.  


 
Oui, mais non. Ca aurait été le cas si le i avait été redéclaré dans l'initialisation du for. Ce n'est pas le cas, on réutilise la même variable, donc c'est normal qu'après la boucle, on récupère 6.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°301385
kadreg
profil: Utilisateur
Posté le 04-02-2003 à 21:36:36  profilanswer
 

Willyzekid a écrit :

Tes deux "i" sont 2 variables différentes...(dans des blocs de code différents).
Suis pas sûr d'être clair...


 
[:tapai] Il redéclare pas i ;)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°301393
Willyzekid
Posté le 04-02-2003 à 21:40:47  profilanswer
 

kadreg a écrit :


 
[:tapai] Il redéclare pas i ;)


aya...
 
Du coup, c'est le même i et il doit renvoyer 6 et pas 3 à la fin de la boucle.


---------------
Horizon pas Net, reste à la buvette!!
n°301395
Deadog
Dain Bramaged
Posté le 04-02-2003 à 21:41:54  profilanswer
 

donc si un redéclare avec int i dans le for, on obtiendra le i du for, et pas le i d'avant le for
 
corrolaire : si on met pas int i dans le for on retrouve la veleur de i avant le for
j'me perd, dite le si j'ai faux http://forum.hardware.fr/icones/icon15.gif

n°301396
Taz
bisounours-codeur
Posté le 04-02-2003 à 21:42:07  profilanswer
 

ton code affiche bien 6 et pas 3.
 
si tu veux déclarer une autre variable i dans le premier statement du for (ce qui est possible en C99 (gcc -std=c99)), cette variable amsque le i du contexte supérieur

mood
Publicité
Posté le 04-02-2003 à 21:42:07  profilanswer
 

n°301397
Deadog
Dain Bramaged
Posté le 04-02-2003 à 21:42:48  profilanswer
 

arf, non, c l'inverse :pt1cable:

n°301399
Willyzekid
Posté le 04-02-2003 à 21:44:11  profilanswer
 

Je me suis fait complétement grillé sur ce topic quelque chose de sévère :D


---------------
Horizon pas Net, reste à la buvette!!
n°301400
Deadog
Dain Bramaged
Posté le 04-02-2003 à 21:45:05  profilanswer
 

++Taz a écrit :

ton code affiche bien 6 et pas 3.
 
si tu veux déclarer une autre variable i dans le premier statement du for (ce qui est possible en C99 (gcc -std=c99)), cette variable amsque le i du contexte supérieur


 
std=c99 ça veux dire utilise le standard du C de 1999 ? me souviens d'une histoire comme ça aussi
 
donc en faite ce standard ne dit pas de remettre l'ancienne valeur, il dit de redéfinir le i du for


Message édité par Deadog le 04-02-2003 à 21:45:35
n°301404
Taz
bisounours-codeur
Posté le 04-02-2003 à 21:49:25  profilanswer
 

:heink:  
qu'est ce que tu nous fais chier avec tes variables avec le meme nom partout, on t'as déjà expliquer 20x le phénomène de masquage (-Wshadow), c'est pas une question de c99 ou d'autre chose, c'est la meme chose en ansi et en K&R

n°301405
Willyzekid
Posté le 04-02-2003 à 21:49:53  profilanswer
 

Non mais il dit rien le standard..ou plutôt il dit que si tu déclare une variable dans le for, elle a une porté locale au for.
Si tu ne la déclare pas, elle doit être déclaré avant et sa valeur change dans le for...


---------------
Horizon pas Net, reste à la buvette!!
n°301411
ITM
Avatar peint à la main
Posté le 04-02-2003 à 21:55:18  profilanswer
 

deadog a écrit :

J'avais lu, ici  
int i=3;
for (i=0 ; i<=6 ; i++);  
printf("%d\n", i); // Renvoie 3 et pas 6
est-ce donc vrai finallement ? :??:


 
Je m'attendais à ce qu'il renvoie 7
GCC 2.95.3-6 -> il renvoie bel et bien 7 !
 
Normal, puisuqe le i de la boucle for est le même que celui déclaré plus haut.
Les manip genre :
for (int i = 0; ...
c'est du C++. En C, on a pas le droit de déclarer des variables n'importe où.


---------------
iteme.free.fr | Mon feedback
n°301419
Taz
bisounours-codeur
Posté le 04-02-2003 à 21:59:47  profilanswer
 

ITM a écrit :


c'est du C++. En C, on a pas le droit de déclarer des variables n'importe où.

permis par le C99 (partiellement dispos sur ta version de gcc)

n°301423
Deadog
Dain Bramaged
Posté le 04-02-2003 à 22:02:46  profilanswer
 

donc j'ai tout faux :/ :D


Message édité par Deadog le 04-02-2003 à 22:03:27
n°301427
Taz
bisounours-codeur
Posté le 04-02-2003 à 22:05:52  profilanswer
 

on ne badine pas avec le C :whistle:  :sol:

n°301435
Deadog
Dain Bramaged
Posté le 04-02-2003 à 22:10:48  profilanswer
 

k :)
 
d'autant ke je suis pour le respect des normes ^^
 
si je récapitule
le standard C99 permet de redéfinir les variables initialisé dans un for, dans ce cas la seulement elles auront une valeur différentes d'une variables portant la même nomination dans le prog
 
mici pour ma culture générale :D :jap:


Message édité par Deadog le 04-02-2003 à 22:12:00
n°301437
Taz
bisounours-codeur
Posté le 04-02-2003 à 22:17:38  profilanswer
 

deadog a écrit :

k :)
 
d'autant ke je suis pour le respect des normes ^^
 
si je récapitule
le standard C99 permet de redéfinir les variables initialisé dans un for, dans ce cas la seulement elles auront une valeur différentes d'une variables portant la même nomination dans le prog
 
mici pour ma culture générale :D :jap:

t'a rien compris
 
en C99
for(int i=0; ; );
 
en C89
{int i; for(i=0; ; );}

n°301440
Deadog
Dain Bramaged
Posté le 04-02-2003 à 22:21:35  profilanswer
 

++Taz a écrit :

t'a rien compris
 
en C99
for(int i=0; ; );
 
en C89
{int i; for(i=0; ; );}


 
http://forum.hardware.fr/icones/icon15.gif
 
on peux mettre ça en C99 ? :
int i;
for(int i=0 ; ; ; );


Message édité par Deadog le 04-02-2003 à 22:22:17
n°301443
Taz
bisounours-codeur
Posté le 04-02-2003 à 22:23:25  profilanswer
 

oui

n°301445
Deadog
Dain Bramaged
Posté le 04-02-2003 à 22:26:57  profilanswer
 

donc "le standard C99 permet de redéfinir les variables initialisé dans un for" c bon ??
 
et d'après  

Citation :

il dit que si tu déclare une variable dans le for, elle a une porté locale au for.


et ce ki a était dit avant, alors "dans ce cas la seulement elles auront une valeur différentes d'une variables portant la même nomination dans le prog" c bon aussi, ou j'me gourre ?

n°301449
Taz
bisounours-codeur
Posté le 04-02-2003 à 22:29:29  profilanswer
 

on ne peut jamais redéfinir une variable. 2 varaibles peuvent avoir le meme nom si elles ont de sportées différentes, mais en aucun cas elles n'ont le mme adressage ou symbole. le nom n'a que peut d'importance dans toute cette histoire, c'est juste de la masturbation intellectuelle de newbie  :D

n°301455
Deadog
Dain Bramaged
Posté le 04-02-2003 à 22:33:47  profilanswer
 

:pfff:  
 
kan je dit redéfinir j'entend utilisé un autre emplacement mémoire ke l'autre déjà définie ;)
 
laisse moi deviner, c pas ça :D


Message édité par Deadog le 04-02-2003 à 22:34:35
n°301457
Taz
bisounours-codeur
Posté le 04-02-2003 à 22:34:27  profilanswer
 

ben non, redéfinir ça veut pas dire ça.

n°301461
Deadog
Dain Bramaged
Posté le 04-02-2003 à 22:36:01  profilanswer
 

oui, j'ai choisie un terme peu approprié, mais j'avais comprit comme j'ai expliké ;)
 
donc ça serait plutôt un genre de "redéfinir localement au for"


Message édité par Deadog le 04-02-2003 à 22:36:33
n°301466
Taz
bisounours-codeur
Posté le 04-02-2003 à 22:38:18  profilanswer
 

mais non putain!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

n°301472
Deadog
Dain Bramaged
Posté le 04-02-2003 à 22:41:27  profilanswer
 

agnah !
 
utiliser un autre emplacement mémoire ke l'autre déjà définie et k complétement indépendante du reste du prog, ké pas du tout pareil, ké dans son ptit monde  
 
 
?

n°301478
Taz
bisounours-codeur
Posté le 04-02-2003 à 22:45:31  profilanswer
 

le nom "humain" (i, ma_variable) est enfait un alais pour le compilateur. meme si le nom humain est pareil, grace à la résolution de l'alias, il ne s'agit en aucun cas de la meme variable

n°301489
Deadog
Dain Bramaged
Posté le 04-02-2003 à 22:50:16  profilanswer
 

oui ça je sais
le "i" du prog est différent du "i" du for lorsqu'on fait avec "int i"
 
le for est comme une fonction alors

n°301492
Taz
bisounours-codeur
Posté le 04-02-2003 à 22:52:57  profilanswer
 

oui et le for n'est pas comme une fonction. les fonctions n'ont rien a voir avec la portée des varaibles. enf ait c'est une historie de bloc {}, et comme le coprs d'une fonction a obligatoirement un bloc, ben....
 
tu peux tres bien ecrire
 
{
 int i;
  {
     int i;
      {
         int i;
      }
   }
}

n°301501
Deadog
Dain Bramaged
Posté le 04-02-2003 à 22:58:08  profilanswer
 

ah ? je savais pas ça :)
 
c pour ça ke j'avais pas comprit ton :
en C99
for(int i=0; ; );
 
en C89
{int i; for(i=0; ; );}
 
 
;)

n°301509
Taz
bisounours-codeur
Posté le 04-02-2003 à 23:00:52  profilanswer
 

ben voilà. en fait la notation rapide (for déclaration ; ;) est un raccourci d'ecriture en C99 et dans d'autres langages. en effet, il est conseiller de limiter la portée des variables au strict nécessaire: ça n'a aucun interet de conserver une variable i qui a servi pour iterer dans un for à partir du moment ou on n'a fini le for.

n°301514
Deadog
Dain Bramaged
Posté le 04-02-2003 à 23:03:35  profilanswer
 

ok, j'essayerai de m'en souvenir :jap:

n°301515
Taz
bisounours-codeur
Posté le 04-02-2003 à 23:05:29  profilanswer
 

n'oublies l'option -Wshadow de gcc qui t'avertit de ces masquages (meme nom, mais portées différentes)

n°301518
Deadog
Dain Bramaged
Posté le 04-02-2003 à 23:08:24  profilanswer
 

ok, merci bcp :)

mood
Publicité
Posté le   profilanswer
 


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

  Pro du C requi : question sur les variables initalisées dans un for

 

Sujets relatifs
Question pratique avec les src, link, include etc...Transmission de variables.
Petite question de PHP...question very hard....
Une question de newbie en programmation...question debutant en vb
question : recuperer une valeur à l'ecran ?Question de C++ sur les &truc = pouet;
[PHP] question toute bete [resolu]Question utilisation d'un lexique (en html)
Plus de sujets relatifs à : Pro du C requi : question sur les variables initalisées dans un for


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