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 :

questions langage C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut questions langage C
    bonjour;
    j'ai quelques questions a poser:
    1-quelle est l'espace memoire occupé par le type enum
    2-Pourquoi ce code ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char *f()
    {
       char tab[4]="txt";
       return tab;
    }
    3-dans quels cas on fait alignement de données
    merci

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par akrlot Voir le message
    bonjour;
    j'ai quelques questions a poser:
    1-quelle est l'espace memoire occupé par le type enum
    Le meme qu'un int.
    2-Pourquoi ce code ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char *f()
    {
       char tab[4]="txt";
       return tab;
    }
    Parce que tu retournes un pointeur sur une zone memoire allouee automatiquement (alias la pile). Cette zone est liberee a la fin de la fonction.
    3-dans quels cas on fait alignement de données
    merci
    Tu n'as normalement pas a t'en occuper, le compilateur s'occupe de faire ca quand c'est necessaire pour la cible.

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cette zone est liberee a la fin de la fonction.
    a ma connaissance le retour des fonctions est gardé dans la pile?

  4. #4
    Membre confirmé Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par défaut
    La valeur oui.
    Tu retournes la valeur d'un pointeur, qui pointe sur une adresse mémoire.

    Cette valeur d'adresse existe toujours, tu y as accès. Mais la zone que tu avais allouée, elle, a été libérée, tu n'as donc plus accès aux valeurs.

    J'espère avoir été suffisament clair ^^

    PS : La balise CODE ! Nondidjiu !

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    a ma connaissance le retour des fonctions est gardé dans la pile?
    NON, c'est une erreur typique à ne pas faire.

    http://c.developpez.com/faq/c/?page=..._string_return

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par akrlot Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cette zone est liberee a la fin de la fonction.
    a ma connaissance le retour des fonctions est gardé dans la pile?
    Et ? L'adresse retournée n'est pas valide. Point.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Par défaut ben ... C'est bon... En fait NON
    Tu as ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char *f()   
    // tu defins ta fonction ... peut etre ajouter void entre la parenthese suivant  
    // le compilateur ou l'extension du fichier
     {
      char tab[4]="txt";   // une chaine de 4 dans une chaine de 4
      return tab; 
    // A priori tu renvoies un pointeur de chaine mais attention 
    // tu as defini une chaine de 4 .. Attention au compilateur
      }
    Enorme erreur !!!!!!!!!!!!!!!!!!
    C'est l'erreur typique du C !!!
    Sauf que !!!
    tab n'existe que pendant l'appel de ta fonction !!!!!!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char * ch;
    ch=f(); // Ch pointe sur tab 
              // f est fermee ... tab variable locale a f N'EXISTE PLUS
              //
    Tu dois faire un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char ch[500]="";  // tu cree ta chaine avec de la place !!!
     
    void f(char * ch1)
    {
    char * txt="txt";
    strcpy(ch1,txt); 
    }
    ....
    et dans le prog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    f(ch);
    ch vaut alors "txt"
    [-mod- Merci d'apprendre à utiliser le forum correctement (citations, balises code...) Tout est expliqué dans les règles du forum.]

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Par défaut
    1) enum ... j'ai vu ... je connais pas
    ce serait pas des trucs un peu comme des tableaux ???
    plutot pratique dans des boucles ?
    J'utilse pas ... mais j'ai deja vu
    3) Tu parles d'indentement ?
    Tous est affaire de convention
    Tu peu ecrire comme tu veux seul la lisibilité compte
    Les compilateur ignorent les espaces et saut de ligne
    En fait ton programme pour le compilateur est ... sur une seule ligne

    J'utilise une convention ancienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void f(void)
    {
    if (0==0)
      {
      ...
      }
    }
    La convention moderne est plutot du style je crois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void f(void) {
      if (0==0) {
      ...
      }
    }
    En regle general ... Utilise un indentement de 2 ou 3 caracteres maxi
    si tu utilise des tabulations ... 4 if imbriques et tu vois plus ton code ...

    Mais bon ... pour les if a rallonge
    je fais plutot un truc du style


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ok=1;
    if (ok)
      if (  )  // negation de ta condition 1
        ok=0;
    if (ok)
      if (  )  // negation de ta condition 2
        ok=0;
    ....
    if (ok)
      {
      ACTION !!!
      }
    cela evite les indentation a rallonge ... Et ca rallonge pas le temps d'execution
    Et cela permet de rajouter un if sans indenter !!!

    De maniere generale... Trouve des regles qui te plaisent ... Plutot elegantes
    Et tiens toi y... Tu pourras relire tes programmes
    Et si tu travailles avec des copains ... Essaie de te diriger vers leur convention...
    Cela evitera des tensions

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par e_gaillard37 Voir le message
    1) enum ... j'ai vu ... je connais pas
    Et tu te sens qualifié pour répondre ?

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Par défaut ... En reponse au moderateur
    Il est clair que je ne suis pas qualifie pour ca.
    J'ai dit ... j'ai vu
    J'utilise pas
    ...
    Parce que c'est d'un interet reduit


    Alors j'ai regardé a nouveau
    Enum c'est un ensemble fini de variables entieres
    definie par des constants de type int
    Cela permet de definir une variable parmi par exemple {1, 25, 78}
    ou 1 25 78 sont des constantes interpertees par le compilateur


    Donc en reponse ... c'est du type int.

    A quoi ca sert ? ... a mon avis pas agrand chose ... sauf si on sait mettre ces donnees successivement dans une boucle..

    Peut etre eclairer le programme en faisant :
    enum couleur {rouge = 1, bleu = 25, vert=78};
    A moins que le compilateur n'autorise pas la comparaison entre un entier et un enum.
    Alors cela permettrait de verifier que le code ne sort jamais de rouge vert et bleu mais cela interdirait l'affectation d'une variable entier avec un enum.
    Enfin, si ... En pascal dans mes souvenir y'avait une notion d'ensemble
    Cela pourrait servir dans un truc du style en C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int a;
    if (a in couleur)  
    {
       // la ca evite un teste en boucle et ca c'est valable !!!
       // auquel cas je presenterai d'humbles excuses.
       // Mais c'est pas pour ca que je l'utiliserai un jour
    }
    ... Maintenant pourquoi je suis passe devant sans jamais regarder certain type d'instruction...

    Y'a un truc qui s'appelle la theorie des langages qui dit la choses suivante
    Quel est le meilleur mixte entre un langage possedant beaucoup de termes et un langage faisant les phrases les plus longues (car peut de mot)

    Eh bien la reponse est ... 2.718 mots


    Autrement dit, la multiplication des notions nuit a la comprehension.
    Donc comme une notion comme enum existe et peut etre remplacee...
    Je vous conseille ... De ne pas l'utiliser ... Car c'est un truc probablement marginal

    En gros, c'est mon avis,moins vous utilisez de type d'instruction, mieux vous comprendrez vos programmes ...

    Excusez moi ... je m'emporte

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Ouh là quel tissu d'âneries.

    Je crois que tu n'aurais pas dû te vexer de la remarque d'Emmanuel. Si tu ne savais pas ce qu'était qu'un enum et à quoi ça servait (et apparemment tu ne le sais toujours pas), tu n'aurais pas dû apporter de réponse.

    cf règle 4.12 du forum
    Par contre vous n'êtes pas les bienvenus pour vous mêler de tout, donner votre avis sans aucun intérêt sur des domaines que vous ne connaissez pas, relayer les délires de [certains] professeurs, nous polluer la vie avec des langages de programmation dont tous le monde se fiche, donner votre avis sur des langages ou des outils que vous ne connaissez pas, nous donner des ordres sur la façon de gérer le forum ou le site, etc.
    Il faut parfois faire profil bas plutôt que de s'emporter.

  12. #12
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par e_gaillard37 Voir le message
    Il est clair que je ne suis pas qualifie pour ca.
    J'ai dit ... j'ai vu
    J'utilise pas
    ...
    Parce que c'est d'un interet reduit


    Alors j'ai regardé a nouveau
    Enum c'est un ensemble fini de variables entieres
    definie par des constants de type int
    Cela permet de definir une variable parmi par exemple {1, 25, 78}
    ou 1 25 78 sont des constantes interpertees par le compilateur


    Donc en reponse ... c'est du type int.

    A quoi ca sert ? ... a mon avis pas agrand chose ...
    C'est très pratique pour définir des codes d'erreur. Et puis, il s'agit de la méthode recommandée pour définir des constantes entières.

    Citation Envoyé par e_gaillard37 Voir le message
    sauf si on sait mettre ces donnees successivement dans une boucle..
    Là, je vois pas trop ce que tu veux dire...

    Citation Envoyé par e_gaillard37 Voir le message
    Autrement dit, la multiplication des notions nuit a la comprehension.
    Donc comme une notion comme enum existe et peut etre remplacee...
    Je vous conseille ... De ne pas l'utiliser ... Car c'est un truc probablement marginal
    Il ne faut tout de même pas raconter n'importe quoi. Et la gestion des erreurs (Ce n'est pas la seule utilité des énumérations)?

    En ce qui concerne la multiplication des notions, le langage C est un langage très compact, mais très pointu. Certains disent que c'est un langage réservés aux spécialistes. Si tu peux te passer d'énumérations dans tes programmes d'une centaine de lignes, dans les miens je n'y arrive pas. Personne ne t'oblige à utiliser des énumérations, mais de là à conseiller de ne pas les utiliser...

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. questions langage C
    Par space_56 dans le forum Autres éditeurs
    Réponses: 11
    Dernier message: 20/12/2007, 00h12
  2. question langage C
    Par claire_cartier dans le forum C
    Réponses: 7
    Dernier message: 05/11/2007, 11h56
  3. question langage C
    Par space_56 dans le forum C
    Réponses: 12
    Dernier message: 02/11/2007, 12h45
  4. [QUESTION] Langages à éviter ?
    Par Shadowritter dans le forum Langages de programmation
    Réponses: 28
    Dernier message: 12/01/2005, 10h34
  5. [langage] pb de question reponse
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 29/11/2002, 11h59

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