Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déclaration de variables

N'importe où ?

Sujet résolu
    12 juillet 2007 à 21:09:49

    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 ?
    • Partager sur Facebook
    • Partager sur Twitter
      12 juillet 2007 à 21:19:37

      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.
      • Partager sur Facebook
      • Partager sur Twitter
        12 juillet 2007 à 21:23:24

        Toutes mes excuses, je parle bien de la variable evenement et pas fin (fin est déja déclarée).
        • Partager sur Facebook
        • Partager sur Twitter
          12 juillet 2007 à 21:27:10

          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.
          • Partager sur Facebook
          • Partager sur Twitter
            13 juillet 2007 à 8:06:07

            Si je prends un exemple général:


            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).
            • Partager sur Facebook
            • Partager sur Twitter
            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              13 juillet 2007 à 11:40:36

              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)
              • Partager sur Facebook
              • Partager sur Twitter
                13 juillet 2007 à 11:54:47

                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;


                }
                }
                }
                if (1)
                {
                int a = 6;
                if (1)
                {
                int a = 7;
                }
                }
                }
                 

                • Partager sur Facebook
                • Partager sur Twitter

                Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                  13 juillet 2007 à 12:00:33

                  Bah je pense que ton code, BCédric, déclare à chaque fois une variable SDL_Event par tour, mais il est bizarre que ça ne plante pas.

                  Que comptes-tu faire ainsi ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 juillet 2007 à 12:03:04

                    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).
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 juillet 2007 à 16:42:50

                      Citation

                      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.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.

                      Déclaration de variables

                      × 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.
                      • Editeur
                      • Markdown