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 :

Modulation .h .c & variables globales


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut Modulation .h .c & variables globales
    Bonjour,

    J'ai un fichier source.c et source.h.
    Je souhaite créer un fichier de log pour le module source.
    je le déclarer dans le source.h en variable globale et ceci afin de ne pas avoir à le passer en paramètre à chacune des fonctions de mon module.

    Cependant, j'aimerai qu'il soit transparent et qu'il soit en plus d'être déclaré, initialisé pour ne pas avoir à le faire à l'appel du module.

    C'est à dire si je n'ai pas été assez explicite, pouvoir faire :
    FILE *log = fopen("log.txt","w"); directement dans le .h
    à la place de FILE *log et dans le main l'initialiser.

    Peut être avec un define mais je n'ai pas trouvé comment faire.
    Cependant, il reste le problème de la fermeture du fichier malgré tout.

    Alors même si c'est possible, je suppose que ce n'est pas une bonne pratique ?

    Merci d'avance pour vos lumières.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Tu ne peux pas initialiser une variable globale de cette façon, la valeur d'initialisation doit être une constante.
    Il te faut donc créer et initialiser log quelque part dans ton module .c et le déclarer dans le .h avec extern.

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    FILE *log = fopen("log.txt","w"); directement dans le .h
    à la place de FILE *log et dans le main l'initialiser.
    Pourquoi veux-tu faire du code dans le fichier d'en-tetes ? Les fichiers source (*.c) ne te suffisent pas pour mettre du code ?

    Rien ne t'empeche, par exemple, de mettre tout le code de log dans un fichier log.c, qui a un fichier d'en-tete log.h dans lequel tu definis les fonctions accessibles de l'exterieur, et dans ton fichier principal main.c, tu inclus ce log.h.
    Pour les fonctions que tu veux declarer, mais qui ne doivent pas etre utilisables par le programme principal, rien ne t'empeche de creer un fichier log_private.h.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Je saisis ce que vous me dites mais je n'arrive pas à le mettre œuvre.
    Je n'arrive pas à faire en sorte que l'initialisation soit constante.

    Module.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "Module.h"
     
    log = fopen("chemin","droit");
     
    void f1()
    {...}
     
    void f2()
    {...}
    Module.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef MODULE_H
    #define MODULE_H
     
    FILE *log;
     
    void f1();
    void f2();
     
    # endif
    Comment écrire fopen("chemin","droit) comme une constante puisque visiblement c'est ce qui me pose problème.

    Cordialement.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ce n'est pas possible, puisque l'évaluation de fopen() se fera à l'exécution. Il doit être placé dans une fonction.

    Dans le .h, on doit avoir la déclaration
    Dans le .c
    qui sera initialisé dans une foncion du .c

  6. #6
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    OKAY, bon ben un doute de moins. Merci pour les précisions =)

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

Discussions similaires

  1. [AC-2003] Module de Variables Globales
    Par denisw95 dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/09/2009, 18h19
  2. variable globale module
    Par shaku dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/04/2009, 22h45
  3. Réponses: 4
    Dernier message: 14/05/2007, 13h44
  4. modules et variables globales
    Par piotrr dans le forum Général Python
    Réponses: 5
    Dernier message: 14/04/2007, 07h45
  5. Variable Globale dans un module de formulaire.
    Par wisiwi dans le forum Access
    Réponses: 5
    Dernier message: 30/03/2006, 14h03

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