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 :

problème variable extern


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 1
    Points : 2
    Points
    2
    Par défaut problème variable extern
    Baon... je suis débutant mais bon il faut pas m'en vouloir.

    Mon problème est que je déclare des variables extern dans un fichier header pour pouvoir les utiliser dans toute mes fichier .c mais lorsque je veux les déclarer via ma fonction il me sort un erreur et je doit les déclarer localement dans le fichier de la fonction. Je me demandais si il y avais un moyen pour ne pas les déclarer localement...

    Je sais pas si c'est clair et si mon français est impécable mais bon... le français et moi sa fais deux
    Dodge Charger mean power!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 235
    Points : 134
    Points
    134
    Par défaut
    salut,

    si tu as 2 fichiers
    dans le premier définir la fonction ou la variable ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int UNE_VALEUR = 15;
    dans le deuxième la déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern int UNE_VALEUR;
    ps : toutes les variables globales sont extern par defaut , mais pas souci de clarté, il est vivement recommandé de mettre extern devant une varialbe lorqu'elle est provient d'un autre fichier.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 36
    Points
    36
    Par défaut
    ce n'est pas un souci de clarter, c'est qu'il faut declarer une variable de type extern si elle est declarer dans un autre fichier, sinon cela ne peut fonctionner.
    Fatalis
    "La femme est le chef-d'oeuvre de Dieu, surtout quand elle a le diable au corps" Alphonse Allais

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Points : 57
    Points
    57
    Par défaut
    non, on n'est pas obligé de déclarer extern une variable utilisé dans un autre fichier. Mais de ce cas il faut bien faire attention à ne pas l'initialiser.

    RAPPEL:
    int x=0; => definition
    extern int x; => declaration
    ectern int x=0; => definition
    int x; => definition potentiel

    une variable ne peut etre definie qu'une fois dans tous les fichiers, mais elle peut etre déclaré dans différents fichiers sources.

    La definition potentiel est un peut plus complexe:
    Si le compilateur rencontre des definitions potentiels et une definition, ce sera cette definition qui sera prit en compte.
    Sinon, si le compilateur ne rencontre que des definitions potentiels, il prend la premiere definition potentiel rencontré comme definition.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 36
    Points
    36
    Par défaut
    oui, mais je parlais de declaration...

    tu ecris

    int var;

    qq part en global dans un fichier, si tu veux pouvoir avoir acces au contenu de var depuis une autre fonction qui est dans un autre fichier, tu doit ecrire en global dans ce fichier la

    extern int var;

    si tu veux pouvoir t'en servir
    Fatalis
    "La femme est le chef-d'oeuvre de Dieu, surtout quand elle a le diable au corps" Alphonse Allais

  6. #6
    Membre averti

    Inscrit en
    Juin 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par sylvain114d
    int x; => definition potentiel

    La definition potentiel est un peut plus complexe:
    Si le compilateur rencontre des definitions potentiels et une definition, ce sera cette definition qui sera prit en compte.
    Sinon, si le compilateur ne rencontre que des definitions potentiels, il prend la premiere definition potentiel rencontré comme definition.
    Je connaissait pas ça.
    En C++ c'est une définiton, point.

    Hmmm... il y a là de quoi faire des bogues délicieux...
    "J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
    www.stroustrup.com

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Points : 57
    Points
    57
    Par défaut
    Un definition potentiel est différente d'une definition normale car elle est prise en charge au moment de l'edition des liens.

    Je n'invente rien, tout est dans le livre de Philippe Drix : Le langage C ANSI, ed. DUNOD.

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par sylvain114d
    Un definition potentiel est différente d'une definition normale car elle est prise en charge au moment de l'edition des liens.

    Je n'invente rien, tout est dans le livre de Philippe Drix : Le langage C ANSI, ed. DUNOD.
    Je pense quand meme comme Musaran, ca doit poser probleme en C++ donc il faut se mefier avec les compilateurs C++.
    De toute maniere meme si c'est permis par le standard ce n'est pas tres facile a lire.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 36
    Points
    36
    Par défaut
    pesonnellement je recommande tout simplement de n'utiliser le moins possible de variable global, voir jamais
    Fatalis
    "La femme est le chef-d'oeuvre de Dieu, surtout quand elle a le diable au corps" Alphonse Allais

  10. #10
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 60
    Points : 105
    Points
    105
    Par défaut
    C'est un fait. Il est conseille en programmation de limiter autant que possible l'utilisation de variable globales.

    Mais comme ce n'est pas toujours possible (ou disons que l'alternative peut parfois bien compliquee ou lourde a mettre en oeuvre en comparaison), il faut alors savoir les utiliser correctement pour eviter les bourdes.
    Si la connaissance peut créer des problemes, ce n'est pas par l'ignorance que l'on peut les résoudre.
    -- Isaac Asimov

  11. #11
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Fatalis
    pesonnellement je recommande tout simplement de n'utiliser le moins possible de variable global, voir jamais
    De loin la meilleure solution quand c'est possible

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 36
    Points
    36
    Par défaut
    il est tout a fait possible d'eviter les variables global dans tout types de projets, sauf biensure ceux qui sont deja ecrit, car cela entrainerais trop de modifications...

    mais pour les nouveaux projets avenir, je conseil l'emploi d'une structure generique, c'est a dire une structure contenant toutes les informations succeptible d'etre utile a un endroit ou a un autre, de declarer cette derniere dans le main, et ensuite de passer son adresse a toutes les sous-fonctions...

    si vous avez trop d'informations a stoquer, consituer votre structure generique de pointeur vers vos autres structures, ainsi vous ne ralentissez pas les performances de vos programmes en ne surchargeant pas la pile a chaques appels de fonctions en ne passant qu'une structure contenant des pointeur (4 octets) et non une structure de structures (bcp octets )

    voila, enfin j'espere que tout le monde m'as compris
    sinon hesitez pas a poser des questions
    Fatalis
    "La femme est le chef-d'oeuvre de Dieu, surtout quand elle a le diable au corps" Alphonse Allais

  13. #13
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Je vois au moins deux cas ou tu es amener a utiliser des variables globales (en dehors du cas trivial ou tu te recuperes un programme deja ecris par qqun et ou tu n'as pas le temps de tout reprendre) :

    * utilisation de librairie statique qui communique avec ton programme par le biais de variables globales (c'est tres laid mais j'ai malheureusement deja vu)
    * pour des problemes de memoire (particulierement en prog embarque, sur PC j'ai jamais eu le probleme) : les variables locales et les variables globales ne sont pas dans la meme zone memoire et on peut arriver au cas ou il ne reste plus de place dans la zone utilise pour les variables locales. Dans le meme genre tu as besoin de passer un parametre a une fonction mais tu n'as pas assez de place sur la pile pour mettre cette variable, il faut alors utiliser les variables globales.

    Mais je dois reconnaitre que ce sont des cas assez marginaux (mais pas inexistant).

  14. #14
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Points : 57
    Points
    57
    Par défaut
    Je reviens sur la definition potentielle:
    Aprés tests, c'est vrai que la definition potentielle n'existe pas en C++, elle n'existe que en C.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 36
    Points
    36
    Par défaut
    de toute facon, existante ou pas en C, on ne devrais jamais avoir a passer par ces choses

    et gl, c'est claire que si la possibilter d'utiliser des variable global a ete faite, c'est qu'il devais y avoir une raison, je le sais bien

    meme des fois quand on recup un vieux code pourrit uniquement pour le tester ou debugger un truc pour un ami, il est plus facile et plus rapide de passer par une global que de modifier les fonctions, modifier les proto, les appels, bref, le bordel quoi, surtout quand leur nombres est exaustif, et surtout quand il faut tout remettre en place apres
    Fatalis
    "La femme est le chef-d'oeuvre de Dieu, surtout quand elle a le diable au corps" Alphonse Allais

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/09/2007, 16h43
  2. Problème variable et objet
    Par Hacken dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/09/2005, 14h10
  3. [javascript] Problème variable globale !!!!
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/08/2005, 16h41
  4. Variable externe...
    Par Loki1600 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/05/2005, 11h28
  5. [Rave report 5.1.3][delphi 7] Probléme variable PIVar
    Par GILLESKLEIN dans le forum Rave
    Réponses: 2
    Dernier message: 05/02/2005, 15h27

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