40 votes

Utiliser une variable du même nom dans des espaces différents

Ce code compile, mais j'ai une erreur d'exécution dans Visual Studio:

Au moment de l'exécution à l'échec du contrôle n ° 3 - la variable " x " est utilisé sans être initialisé...

int x = 15;
int main()
{
    int x = x;
    return 0;
}

Je ne comprends pas ce comportement... dans la zone d'erreur lorsque je clique sur continuer, le programme reprend et x a un contenu corrompu (comme -8556328 au lieu de 15).

Pourquoi ce code fonctionne sans problème, et l'int tableau est bien déclarée?

const int x = 5;
int main()
{
     int x[x] = {1,2,3,4};
     return 0;
}

35voto

Bo Persson Points 42821

Lorsque vous déclarez une nouvelle variable, son nom devient visible ici

 int x =
//     ^- there
 

parce que c’est à ce moment que la variable est entièrement déclarée, et en tant que telle; son nom signifie quelque chose. À ce stade, toute autre variable (précédemment déclarée) dans une étendue environnante sera masquée.

5voto

Adi Points 92

Il n'y a pas d'opérateur de résolution de portée en C, vous pouvez donc ne pas être en mesure d'utiliser

 int x = x;
 

dans votre programme.

-10voto

HaraldDutch Points 225

Vous n'avez pas décrit votre code correctement: votre fonction principale est probablement statique. Une fonction statique d'une classe ne peut pas utiliser les membres non statiques de cette classe

 class Program
{
    int x = 4;
    static int y = 5;

    static void Main(string[] args)
    {
        Console.WriteLine(x.ToString()); // <- compiler error: x not static
        Console.WriteLine(y.ToString()); // <- Ok, y is also static
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X