Si je comstack et exécute le code suivant, il affiche 0 au lieu de 10.
#include main() { int Var=10; { char Var=Var; printf("%d",Var); } }
Pourquoi cela imprime 0 et pourquoi pas 10?
Parce que dans la déclaration locale
char Var=Var;
la bonne occurrence de Var
fait référence au Var
local, pas au Var
. Comme Alk commenté, il s’agit d’ un comportement indéfini à atsortingbuer à partir d’une variable non initialisée.
Donc, votre déclaration n’initialise pas du tout Var
, c.-à-d. Var
contient des ordures. Dans votre cas particulier, cette poubelle se trouve être 0.
BTW, avoir deux homonymes Var
dans la même fonction est vraiment mauvais goût.
Comme cette réponse l’ indique, vous devriez comstackr avec gcc -Wall -Wshadow
pour obtenir des avertissements sur votre code. (ajoutez également -g
pour obtenir des informations de débogage afin de pouvoir déboguer avec gdb
)
En supposant que vous utilisez gcc, vous voudrez activer -Wshadow ( http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html ). Cela ferait apparaître une erreur à la variable interne portant le même nom que la variable externe. Le zéro est une valeur aléatoire. Il pourrait imprimer des déchets à cet endroit.
essaye ça
#include main() { int Var1=10; { char Var=Var1; printf("%d",Var); } }