Pourquoi la valeur par défaut des variables locales en C est identique?

#include  int main() { int i,j=3; i=4+2*j/i-1; printf("%d",i); return 0; } 

Il imprimera 9 à chaque fois, bien que je ne sois pas initialisé. Donc, il doit imprimer toutes les valeurs parasites. S’il vous plaît, expliquez…

    La valeur d’une variable locale non initialisée en C est indéterminée et sa lecture peut invoquer un comportement indéfini.

    Maintenant, l’exécution répétée d’ un programme particulier compilé avec un compilateur particulier dans un environnement particulier (comme vous le faites) est susceptible de générer le même comportement (toujours non défini, bien sûr). Cela peut être dû au fait que le système d’exploitation atsortingbue généralement à votre processus la même plage de mémoire logique à chaque fois que vous l’exécutez, de sorte que les déchets lus par votre programme ont de bonnes chances d’être identiques à chaque fois (mais cela rest tout de même des déchets). Ou bien cela pourrait être parce que le compilateur ne se donne même pas la peine de vous donner une représentation binary de la poubelle que vous liriez mais plutôt de vous donner autre chose (tant que cela ne viole pas la norme).

    Votre code entraînera un Undefined Behavior . Un comportement non défini fait référence à un code informatique dont le comportement est imprévisible. La sortie du code dépend du compilateur, de l’environnement.

    http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf est la norme internationale pour les langages de programmation en langage C

     Page No : 126 Heading : Semantics Item No : 10 

    Citant de cela

    Si un object ayant une durée de stockage automatique n’est pas initialisé explicitement, sa valeur est indéterminée.

    Cela doit répondre à votre question.

    EDIT: Proposé par @Jens Gustedt dans les commentaires

    6.3.2.1, p2, dit Si la lvalue désigne un object de durée de stockage automatique qui aurait pu être déclaré avec la classe de stockage register (son adresse n’a jamais été prise) et que cet object est non initialisé (non déclaré avec un initialiseur et aucune affectation à il a été effectué avant utilisation), le comportement est indéfini.

    Lorsqu’une variable est utilisée avant son initialisation, elle prend une valeur de mémoire de mémoire.
    Une valeur de garbage est une dernière valeur stockée dans un emplacement de mémoire réservé à cette variable (dans ce cas, i ).

    Lorsque vous comstackz votre programme, il récupère chaque fois la valeur stockée précédente à partir de cet emplacement de mémoire et entraîne un comportement non défini.
    Il n’est pas nécessaire que cela donne la sortie 9 chaque fois. Le programme peut se comporter différemment lorsqu’il est compilé avec différents compilateurs.