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 :

Variables globales utilisées par plusieurs fichiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Par défaut Variables globales utilisées par plusieurs fichiers
    Bonjour,

    J'ai besoin de créer un programme contenant :
    _ un fichier datas.c qui récupère une donnée régulierement et l' affecte à une variable
    _ un fichier read.c qui doit lire cette variable régulièrement et executer des actions en fonction de sa valeur

    Les 2 fichiers ne s'appelant pas, j''ai donc penser utiliser une variable globale afin de stocker cette valeur. data.c pourrait alors la modifier et read.c la consulter.

    Me basant sur ce que j'ai pu lire dans le FAQ, j'ai donc un fichier datas.h qui comprends la déclaration "extern int val" alors que mon fichier datas.c comprends la déclaration "int val =4" et mon fichier read.c un "include datas.h".

    Cependant, lorsque j'essaie après d'afficher la valeur de "val" par l'intermédiaire d'un printf dans read.c, j'obtiens l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    read.c : undefined reference to 'val'
    Je dois donc faire quelque chose de mal mais quoi ?

    Merci beaucoup pour votre aide

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Une solution plus éléguante serais de mettre ta variable en static (privée au module datas.c) pius en publique créer deux fonctions ce qu'on appel communement en Orienté Objet: accesseur/modificateur ... donc une fonction qui permet de lire le contenu de la variable et une qui permet l'écriture de la variable.

    Cette méthode permet aussi d'éviter une modification accidentelle de la variable étant donné qu'il faut dans ce cas utiliser les fonctions pour y acceder !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Je pense qu'il va falloir que tu montres un peu de code.

    Sinon, je preconiserais d'utiliser des accesseurs du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int getval();
    void setval(int newval);
    la vraie valeur serait en globale mais globale seulement au module (utiliser static) qui contient les accesseurs.

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    copiteur !!

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Gruik
    copiteur !!
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Par défaut
    Merci pour votre aide.

    J'ai donc essayer de mettre en place votre solution.

    J'ai mis des fonctions "void setVal(newval)" et "int getval()" dans datas.c et déclarer une "static int val"

    Mais quand je fais appel à getval() depuis read.c , j'ai l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    undefined reference to 'getval'
    Pourtant je fais bien un "include "datas.h"" et dans le datas.h j'ai bien déclaré "int getval()".

    D'ou vient mon erreur ? (et oui désolé je n'y connais vraiment pas grand chose)

    Merci encore.

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    On peut voir les contenu des tes fichiers ?

    En générale quand il t'affiches ce message d'erreur c'est qu'il ne trouve pas de definition de fonction correspondant à la déclaration du prototype et dans 90% des cas c'est un oublie d'ajout de fichier dans la ligne de compilation !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/05/2009, 20h55
  2. Variable global utilisable dans plusieurs Forms
    Par nams2590 dans le forum Visual C++
    Réponses: 13
    Dernier message: 11/12/2007, 11h34
  3. variable utilisée par plusieurs classes
    Par yasmine* dans le forum Langage
    Réponses: 9
    Dernier message: 08/02/2007, 15h44
  4. Réponses: 22
    Dernier message: 23/11/2006, 23h42
  5. [struts] utilisation de plusieurs fichiers de config
    Par Boosters dans le forum Struts 1
    Réponses: 4
    Dernier message: 25/03/2004, 10h04

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