Bonsoir, j'aimerais savoir si ce code est correct:
while(!fin){
SDL_Event evenement;
SDL_WaitEvent(&evenement);
-Le compilo ne met pas d'erreurs et ça marche, mais dans le cours de Mathéo, on ne vois que la déclaration dans un for, dans la partie "initialisation"...
-Si on ajoute une initialisation de la variable, celle-ci ne sera donc initialisée qu'une seule fois n'est-ce pas ?
En fait si j'ai bien compris, la ligne sera ignorée une fois déclarée... Non ?
Salut, je comprend pas parce que ta variable ne semble pas déclarée (elle n'est pas typée).
En tout cas ce que tu dois retenir c'est que chaque variable est locale à son bloc d'instruction. Ta variable fin, si elle est déclarée par le while, sera automatiquement détruire à la fin de l'accolade fermante du while. Ainsi, tu peux faire par exemple:
{ int var = 0; } { int var = 1; }
Tu déclares deux variables qui ont le même nom, mais il n'y a pas de conflit parce qu'elles n'appartiennent pas aux mêmes blocs.
Edit: Si tu redéclares une variable dans un même bloc par contre, ça devrait te faire une erreur à la compilation, et ne pas simplement l'ignorer.
Ah ok.. Ba alors je saisis pas vraiment le problème désolé, je connais pas la SDL. Par contre je vois une déclaration de variable suivie d'un appel de fonction, ayant pour paramètre l'adresse de la variable fraîchement créée. Tu pourrais expliquer plus précisément ce qui ne va pas ? Dans tous les cas, une redéfinition de ta variable est interdite et ne marcherait pas.
Edit: Bon ba en effet j'avais mal compris la question, désolé pour mes réponses inutiles Nanoc à raison, chaque tour de boucle est exécuté comme un nouveau bloc d'insctruction, tes variables sont donc indépendantes.
int a = 4; do{ int a = 0; cout << Entrez un nombre : << flush; cin >> a; }while(a == 0); cout << a << endl;
(Ce code demande un nombre à l'utilisateur tant que le nombre entré vaut 0.)
Il est possible de déclarer 2 variables avec le même nom. Cela ne pose pas de problème tant qu'elles ne sont pas dans le même bloc. (On parle aussi de portée). La valeur que l'utilisateur entre au clavier sera sauvegardée dans le a qui est déclaré dans le bloc. (LE compilateur résout toujours la portée au bloc le plus proche). Si on avait déclaré aucun a dans le bloc, alors la valeur de l'utilisateur serait dans le a déclaré en-dehors du bloc.
Ce code a cependant 2 défauts:
1) On redéclare une variable a à chaque "tour" de boucle. On perd donc du temps pour rien puisque si on l'avait fait en-dehors, on aurait dû le faire qu'une fois. (Ca a peut-être peu d'importance sur un exemple bateau mais sur un gros truc avec des variables autres que des int, cela a de l'importance).
2) On ne peut rien faire avec la valeur entrée par l'utilisateur, car à la fin du while final, la variable a est détruite. (Et ce qu'il y ait ou non un autre a à l'extérieur du bloc).
OK merci.
Ce que je voulais savoir précisémment, c'était si le fait de déclarer une variable au milieu d'une boucle (pas avant ni dans la partie initialisation du for) faisait que la variable était déclarée à chaque tour de boucle (puis détruite à la fin)
Just for fun, un super code avec de la variable locale dans tous les sens, un truc inchiable et monstrueux Je ne suis meme pas sur qu'on puisse (meme avec l'opérateur de portée :: ) piloter toutes les variables du contexte d'amont
void fonc() { int a = 2; if(1) { int a = 3; if(1) { int a = 4; if(1) { int a = 5;
Pour une touche de précision, il me semble qu'on n'est pas obligé de créer un vrai bloc d'instruction (par exemple avec les if{} ) pour que la localité des variables soit appliquée. Il suffit de mettre des accolades pour créer un bloc d'instructions (technique qui peut servir si on a besoin que temporairement d'une variable). Pour être plus clair, ton code fonctionnerait de la même façon en écrivant :
void fonc() { int a = 2; {// a == 2 int a = 3; // a == 3 {// a == 3 int a = 4; // a == 4 {// a == 4 int a = 5; // a == 5 }// a == 4 }// a == 3 }// a == 2 {// a == 2 int a = 6; // a == 6 {// a == 6 int a = 7; // a == 7 }// a == 6 }// a == 2 }
Ps: Je sais que y a d'autres moyens pour désalouer la mémoire si on a besoin d'une variable que temporairement mais c'est un exemple =)
PPS: Vous les voyez alignés ou pas les commentaires ? Parce que c'est assez foireux à faire en zCode
Edit pour Skypers: Lis les réponses des autres avant de donner la tienne (qui est fausse, il est normal que ça ne plante pas on est en C++ pas en C).
Ce que je voulais savoir précisémment, c'était si le fait de déclarer une variable au milieu d'une boucle (pas avant ni dans la partie initialisation du for) faisait que la variable était déclarée à chaque tour de boucle (puis détruite à la fin)
Oui la variable est déclarée à chaque tour de boucle et détruite à la fin de la boucle.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html