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 :

programmation modulaire C


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut programmation modulaire C
    Bonjour;
    J'ai des questions sur la programmation c embarqué en modules:
    -Si on a un module2 qui appelle module1 est il possible de declarer une variable globale dans module1 et l'appeler comme extern dans module2 pour la modifier et de la relire dans module1?
    -Est il possible de declarer une variable globale dans module2 et de la modifier et de l'appeler comme extern dans module1 pour la lire et modifier?
    merci pour vos reponses

  2. #2
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par akrlot Voir le message
    Bonjour;
    J'ai des questions sur la programmation c embarqué en modules:
    -Si on a un module2 qui appelle module1 est il possible de declarer une variable globale dans module1 et l'appeler comme extern dans module2 pour la modifier et de la relire dans module1?
    -Est il possible de declarer une variable globale dans module2 et de la modifier et de l'appeler comme extern dans module1 pour la lire et modifier?
    merci pour vos reponses
    Oui c'est possible!

    La réponse est nottamment dans la FAQ:
    Comment utiliser des variables globales dans plusieurs fichiers ?

  3. #3
    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
    -Si on a un module2 qui appelle module1
    Un module n'appelle pas un module. Seule une fonction peut appeler une fonction.
    est il possible de declarer une variable globale dans module1 et l'appeler comme extern dans module2 pour la modifier et de la relire dans module1?
    -Est il possible de declarer une variable globale dans module2 et de la modifier et de l'appeler comme extern dans module1 pour la lire et modifier?
    merci pour vos reponses
    L'usage des variables permanentes de portée globale est fortement déconseillé. Si tu y tiens :

    http://emmanuel-delahaye.developpez....s.htm#globales

  4. #4
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    merci pour le lien.
    Je sais comment utiliser les variables globales.mais dans ma question2 j'ai dit que les fonctions du module2 appellent ceux du module1.donc j'essaye d'acceder aux variables d'un module superieur dans un module inferieur.
    Est ce possible?

  5. #5
    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
    merci pour le lien.
    Je sais comment utiliser les variables globales.mais dans ma question2 j'ai dit que les fonctions du module2 appellent ceux du module1.donc j'essaye d'acceder aux variables d'un module superieur dans un module inferieur.
    Est ce possible?
    Tu fais plusieurs manœuvres douteuses...

    - usage de variables globales
    - appels 'remontants'...

    C'est techniquement possible, mais c'est très laid, difficile à maintenir, à lire et aux effets parfois inattendus (valeurs étranges, boucles infinies...)

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    pour mieux eclaircir voici un exemple:
    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
    //module sup
    #include "module_inf.h"
    int var;
    //modification de var
    void modif_var(void){
    var=0;
    //appel de la fonction du module1 qui lit var et fait d'autres instructions
    module1_func();
    }
    ///////////////////////////
    //module inf
    extern var;
    void module1_func(void){
    read(var);//lire var
    }

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    1. si ton module appelé "inférieur" a à connaitre quelque chose d'un module "supérieur", la conception est mal faite et viole le modèle en couches.
    2. admettons que l'on oublie le côté hiérarchique. Il faut alors que ta fonction de niveau inférieur ait en paramètre la varaible ou l'adresse de la variable...

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Je ne sais pas exactement ce que vous voulez faire, mais je suis sur que d'utiliser des variables globales pour remplacer le passage par adresse, ce n'est pas une bonne idée. Il vaut mieux faire un passage par adresse si ça peut s'appliquer à ce que vous voulez faire.

  9. #9
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    1. si ton module appelé "inférieur" a à connaitre quelque chose d'un module "supérieur", la conception est mal faite et viole le modèle en couches.
    Ceci peut il etre une alternative pour respecter le modele en couches:
    je definit la variable globale dans le module inferieur; j'y accede dans le module superieur par extern je la modifie et j'appelle(dans le module sup) une fonction (du module inf) qui la lit pour passer sa valeur au module inf.
    pour resumer je la modifie dans le module sup et je la relit dans le module inf

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut


    Pourquoi faire simple qund on peut faire complique....

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Gio,

    Bien compliqué ça.

    L'usage des variables globales, et encore plus d'un module à l'autre, est très formellement déconseillé.

    On peut quasiment toujours s'en passer, et il faut s'en passer, sinon on produit du code qui devient vite difficilement compréhensible/maintenable.

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par akrlot Voir le message
    pour mieux eclaircir voici un exemple:
    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
    //module sup
    #include "module_inf.h"
    int var;
    //modification de var
    void modif_var(void){
    var=0;
    //appel de la fonction du module1 qui lit var et fait d'autres instructions
    module1_func();
    }
    ///////////////////////////
    //module inf
    extern var;
    void module1_func(void){
    read(var);//lire var
    }
    Déjà, il est d'usage qu'une fonction déclare toutes les variables qu'elle utilise. Cela rend la fonction "un poil" plus lisible. Et si la variable est globale rien n'empêche de la redéclarer dans la fonction en extern

    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
    int var;
     
    //modification de var
    void modif_var(void){
        extern int var;
        var=0;
     
        //appel de la fonction du module1 qui lit var et fait d'autres instructions
        module1_func();
    }
     
    ///////////////////////////
    //module inf
    void module1_func(void){
        extern int var;
        read(var);//lire var
    }
    Maintenant, si la fonction ne doit que lire var autant la lui passer en paramètre

    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
    int var;
     
    //modification de var
    void modif_var(void){
        extern int var;
        var=0;
     
        //appel de la fonction du module1 qui lit var et fait d'autres instructions
        module1_func(var);
    }
     
    ///////////////////////////
    //module inf
    void module1_func(int valeur){
        read(valeur);//lire var venu du dessus
    }
    Mais bon, travailler avec des globales en s'affranchissant volontairement des protections de la localisation c'est ouvrir la porte aux bugs...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. L'interet de la programmation modulaire.
    Par giggs dans le forum C
    Réponses: 3
    Dernier message: 01/11/2006, 12h35
  2. programmation modulaire en C
    Par lastrecrue dans le forum GTK+ avec C & C++
    Réponses: 11
    Dernier message: 28/06/2006, 21h03
  3. programmation modulair en C
    Par argon dans le forum C
    Réponses: 32
    Dernier message: 26/06/2006, 10h10
  4. programmation modulaire
    Par barbarello dans le forum C++
    Réponses: 2
    Dernier message: 19/02/2006, 13h04
  5. [Projet] Programmation modulaire d'un projet.
    Par loverdose dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 18/11/2005, 21h59

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