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 :

Définir des fonctions static dans un fichier séparé.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut Définir des fonctions static dans un fichier séparé.
    Bonjour,

    J'ai besoin d'écrire des fonctions de callback, et comme il y en a beaucoup, pour plus de clarté, j'aimerais les écrire dans un fichier séparé.
    Mais ce sont des fonctions "static".
    Comment faire ?

    merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Pour quelle raison elles sont "static"

    En général, en C, quand on rend une fonction static, c'est pour la rendre non visible d'un autre module C

    que ces fonctions soient des callback ne devrait avoir aucun impact sur leur visibilité static ou non
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Elles sont statiques car on veut avoir des fonctions de même nom dans des fichiers sources différents. Mais je n'ai rien compris à la question, si une fonction fait référence à une fonction callback (statique), les deux doivent simplement se trouver dans le même fichier source ...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    On peut aussi imaginer une autre solution :

    tu mets tes fonctions de callback dans un module à part et tu les rends statiques.

    Dans ce même module, tu ajoutes une fonction non statique qui te retourne un tableau de pointeurs de fonction sur tes fonction callback. Cela suppose que tes fonctions callback on toute le même prototype.

    Dans le cas contraire (pas le même prototype), tu retournes une structure de pointeurs de fonction.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    Citation Envoyé par Melem Voir le message
    Elles sont statiques car on veut avoir des fonctions de même nom dans des fichiers sources différents. Mais je n'ai rien compris à la question, si une fonction fait référence à une fonction callback (statique), les deux doivent simplement se trouver dans le même fichier source ...
    Elles sont statics car elles ne sont utilisées nulle part ailleurs. Et je voulais separer les fichiers pour plus de clarté car il y en a beaucoup.

    Citation Envoyé par ram-0000 Voir le message
    tu mets tes fonctions de callback dans un module à part et tu les rends statiques.

    Dans ce même module, tu ajoutes une fonction non statique qui te retourne un tableau de pointeurs de fonction sur tes fonction callback. Cela suppose que tes fonctions callback on toute le même prototype.

    Dans le cas contraire (pas le même prototype), tu retournes une structure de pointeurs de fonction.
    Comme le but était de de simplifier la chose, malheueresement cette solution est un peu compliquée

    Sinon je peux peut etre ecrire les fonctions en question dans un .h et l'inclure seulement là ou je m'en sert ?
    mais c'est peut etre pas conseillé de faire comme ca ?

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Définir quelquechose dans un .h, c'est mal

    On définit dans un .c et on déclare dans le .h (si besoin est)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    En reprenant l'idée de Ram :
    interface.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct {
       void (*fonction_1)();
       void (*fonction_2)();
       void (*fonction_3)();
    } stInterface;
     
    void InitialiserInterface(stInterface*pItf_);
    interface.c
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #include "interface.h"
     
    static void ma_fonction_1();
    static void ma_fonction_2();
    static void ma_fonction_3();
     
    void InitialiserInterface(stInterface*pItf_)
    {
       pItf_->fonction_1 = ma_fonction_1;
       pItf_->fonction_2 = ma_fonction_2;
       pItf_->fonction_3 = ma_fonction_3;
    }
     
    static void ma_fonction_1()
    {
       /* traitement */
    }
     
    static void ma_fonction_2()
    {
       /* traitement */
    }
     
    static void ma_fonction_3()
    {
       /* traitement */
    }
    Exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int main(){
    stInterface mon_interface;
       InitialiserInterface(&mon_interface);
       mon_interface.fonction_1();
       mon_interface.fonction_2();
       mon_interface.fonction_3();
    	return 0;
     
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/02/2011, 19h30
  2. Réponses: 0
    Dernier message: 20/09/2010, 15h25
  3. Peut-on définir des fonctions dans un script ?
    Par nchristedem dans le forum MATLAB
    Réponses: 20
    Dernier message: 11/08/2009, 11h38
  4. Utiliser des fonctions contenues dans un fichier .bas
    Par usbeck dans le forum Visual C++
    Réponses: 4
    Dernier message: 11/08/2006, 12h03
  5. Réponses: 6
    Dernier message: 22/05/2006, 13h54

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