IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Affichage de variables


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de MayaKobayashi
    Femme Profil pro
    Etudiante en 1ère année Licence mention Informatique
    Inscrit en
    Novembre 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Etudiante en 1ère année Licence mention Informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 26
    Par défaut Affichage de variables
    Bonsoir,

    Je rencontre un problème lors de la compilation de ce programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
    int a,b,c,d,e,f,g,x,y,z;
    a = 1 ; b = 4*a ; c = 5 ; d = (b+a) == c ;
    e = ! d ; c = b*a-c;
    f = ( c != 10 ) && ( e );
     
    if (b/5 <= 1) x = b; 
    else 
    { 
    y = e;
    x = a; 
    }
     
    printf("%d %d %d %d %d %d %d %d %d %d", a, b, c, d, e, f, g, x, y, z);
    return 0;
    }
    L'énoncé demande d'afficher la valeurs de toutes ces variables. Or, je ne comprend pas comment g peut prendre la valeur de 1996755298, que y prend la valeur de -47 et z de -2 (alors qu'ils ne sont même pas affectés), à la compilation !
    Quelqu'un pourrait-il m'éclairer ?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut _ _ _
    Ses valeurs sont aléatoire (pas dans tous les cas), même si tu n'a pas initialisé tes variables elles occupent quand même de l'espace (des bits), que ta variable soit initialisé ou pas elle occupe un nombre de bits, les bits de ta variable code obligatoirement pour une valeur (1 ou 0).
    Ta variable aura obligatoirement une valeur (c'est mécanique).
    Exemple simple pour expliquer la valeur de g:
    L'espace qu'occupe g maintenant a été occupé avant lui par autre(s) chose(s), et on n'a écrit dessus 1996755298, puis tu créer g, ce qui équivaut a dire que g occupe cette espace (cette espace c'est g), sauf que tu n'as pas écrit dessus, donc rien a changer.
    C'est comme si toi tu achètes un manoir et que tu trouves un gâteau au chocolat sur la table de la cuisine, c'est aléatoire tu pouvais aussi trouver des excréments dessus (tu as plus de chance de trouver des excrements).
    Dernière modification par Invité ; 02/12/2015 à 23h35.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Pour être plus précis...
    Quand tu déclares une variable, le compilateur se charge de lui assigner un espace mémoire. Quand tu cherches à connaitre la valeur de ta variable, le compilateur va simplement chercher dans cet espace mémoire quel est la valeur stocké.

    Ton programme n'est pas seul sur le pc, la mémoire est utilisé par tous. D'autre programme ont pu accéder à cet espace mémoire avant que le compilateur ne décide de le donner à ton programme. Du coup, il reste forcément des "crasses", des anciennes valeurs d'autre programme qui sont resté là... Quand tu déclares une variable et que tu ne l'initialises pas, quand tu ira lire son contenu le compilateur ne fera qu'allez lire les "crasses" précédentes.

  4. #4
    Membre averti Avatar de MayaKobayashi
    Femme Profil pro
    Etudiante en 1ère année Licence mention Informatique
    Inscrit en
    Novembre 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Etudiante en 1ère année Licence mention Informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 26
    Par défaut
    Merci pour ces précisions
    Et dans le cas où je ne dispose pas de compilateur, c'est à dire si je veux les afficher à la main ? g, y, z n'ont pas d'affectations dans ce programme ! Comment derais-je m'y prendre pour obtenir leurs valeurs ?

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Des variables non-initialisées sont à considérer comme n'ayant pas de valeur, et tu ne dois pas les afficher, c'est tout.
    Dans certains cas, le seul fait de lire une variable non-initialisée cause un comportement indéfini.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre chevronné
    Inscrit en
    Juillet 2012
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 231
    Par défaut
    Citation Envoyé par Médinoc
    Dans certains cas, le seul fait de lire une variable non-initialisée cause un comportement indéfini.
    C’est pas dans certains cas, c’est toujours un undefined behavior il me semble (Cf. annexe J du standard C99)*:
    Citation Envoyé par ISO/IEC 9899:TC3
    J.2 Undefined behavior
    […]
    The value of an object with automatic storage duration is used while it is indeterminate (6.2.4, 6.7.8, 6.8).
    Après, comme tous les UB soit l’effet est visible (les exemples que tu cites) soit il ne l’est pas.

Discussions similaires

  1. Affichage de variables de SESSION
    Par yoan_111 dans le forum ASP
    Réponses: 2
    Dernier message: 24/04/2006, 11h15
  2. problème d'affichage de variable
    Par sam01 dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 00h20
  3. Réponses: 3
    Dernier message: 02/03/2006, 19h22
  4. Affichage menu variable
    Par mosquitout dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 15/12/2005, 14h50
  5. [RegEx] Preg_replace et affichage de variable
    Par xperienss dans le forum Langage
    Réponses: 6
    Dernier message: 13/10/2005, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo