Signification de cette erreur ? [Résolu]

Signaler
Messages postés
15
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
5 septembre 2006
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonsoir,

J'ai obtenu plusieurs fois ce message d'erreur: "Embedded statement cannot be a declaration or labeled statement"
Ne sachant pas du tout de quoi il venait, j'ai tenté de reproduire la situation avec ceci:

    void lolmdr()
    {
        if ("" == "")
        int i = 1;
    }

J'obtiens effectivement le même message d'erreur, et en ajoutant simplement des accolades, le message disparait:

    void lolmdr()
    {
        if ("" == "")
        {
            int i = 1;
        }
    }

Est-ce quelqu'un saurait m'expliquer ce que signifie le message d'erreur et pourquoi il y a une différence quand je mets les accolades ? Merci

9 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

Avec la première, tu ne vas jamais rien faire de ta variable déclarée, car la fin de portée du if vient directement après.
Tandis qu'avec la seconde, les accolades définissant la portée te permettent de mettre plusieurs lignes, donc de faire quelquechose de ta valeur.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
154
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
22 août 2007

donc tu as la même erreur avec:

  void lolmdr()
  {
      if ("" == "")
        Bidule test = new Bidule();
  }

   si oui.. c'est normale... car tu déclare ta variable à la fin de la portie du if... donc le compilateur "pense" qu'il y as un problème.. car variable inutilisable... du ne fais qu'instancier un obect (pour le compilateur)

avec les accolade il n'y as plus ce problème...

ou si tu fait

void lolmdr()
{
    Bidule test;
    if ("" == "")
       test = new Bidule();
}

il ne devrais "peut-êrte" plus avoir de problème car tu ne fais qu'instancier la variable, qui aurras une portée plus grande que le if.. donc pas de problème pour le compilateur..

c'est peut-être plus un "bug" du compilo.... qu'autre chose..
Messages postés
15
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
5 septembre 2006

Oui mais j'ai aussi cette erreur quand je déclare un formulaire (Bidule test = new Bidule()) avec la méthode Show() directement dans le constructeur, pourtant j'ai plus besoin d'accolades.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Euh, désolé je ne vois pas ce que tu veux dire pour ton 2ème exemple.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
15
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
5 septembre 2006

Ok, merci pour vos réponses =)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Un bug ?
Au contraire, il te dit que tu fais quelquechose qui ne sert à rien, j'appelle plutôt ça une détection d'erreur moi.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
154
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
22 août 2007

oui... mais le fait de mettre des accolades ne devrais rien changer... il devrais aussi voir l'erreur..
Messages postés
154
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
22 août 2007

ou alors un avertissement comme quoi la variable n'est jamais utilisée. ou quelque chose dans le genre... peut-être le fait-il j'ai pas essayer..
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Oui, il pourrait effectivement détecter que tu ne fais rien avec si une analyse plus poussée était faite (on n'en est pas encore au stade des compilos qui ont 20 ans d'évolution derrière eux)
Avec les accolades, tu as la possibilité de faire quelquechose avec, c'est tout ce qui lui importe.

void lolmdr()
{
   if ("" == "")
   {
      Bidule test = new Bidule();
   }
}

=>

void lolmdr()
{
   if ("" == "")
   {
      Bidule test = new Bidule();
      test.UneMethode();
      ...
   }
}

Sans les accolades il est sûr et certains que tu n'en fait rien :-)

/*
coq
MVP Visual C#
CoqBlog
*/