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 :

Ou sont mes fonctions ?


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut Ou sont mes fonctions ?
    Bonjour à tous,

    J'ai une petite question d'architecture. J'étudie un programme open source (Asterisk). Je m'intéresse particulièrement au fichier chan_mgcp.c.

    Le problème est que je ne trouve pas de fichier chan_mgcp.h contenant les fonctions développées dans le .c

    Ma question est donc la suivante : Comment le programme sait où aller chercher les fonctions du .c ??

    Merci d'avance pour vos réponses !

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Peut-être que le fichier porte un autre nom ? Dans le fichier source qui utilise ces fonctions quels sont les headers include ?

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini Voir le message
    J'ai une petite question d'architecture. J'étudie un programme open source (Asterisk). Je m'intéresse particulièrement au fichier chan_mgcp.c.

    Le problème est que je ne trouve pas de fichier chan_mgcp.h contenant les fonctions développées dans le .c
    Tu parles des prototypes des fonctions publiques ? Il sont certainement dans un .h, mais qui ne s'appelle pas forcément chan_mgcp.h.
    Ma question est donc la suivante : Comment le programme sait où aller chercher les fonctions du .c ??
    Ca, c'est totalement une autre question. Un .h ne sert pas à indiquer "Comment le programme sait où aller chercher les fonctions du .c", mais à fournir au compilateur les moyens d'écrire des appels de fonctions corrects, c'est avec le bon nombre de paramètres et le bon type de paramètres et de retour.

    http://emmanuel-delahaye.developpez....htm#production
    http://emmanuel-delahaye.developpez.....htm#prototype
    http://emmanuel-delahaye.developpez....m#bibliotheque

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Et bien, il y en a beaucoup.... Comment savoir dans quel fichier sont définis ces fonctions ?

    Quand je fais une recherche du contenu des fichiers avec une nom d'une fonction de mon .c, je n'obtiens comme réponse que le fichier .c en question... Il est pourtant bien implémenté quelque part....

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini Voir le message
    Et bien, il y en a beaucoup.... Comment savoir dans quel fichier sont définis ces fonctions ?

    Quand je fais une recherche du contenu des fichiers avec une nom d'une fonction de mon .c, je n'obtiens comme réponse que le fichier .c en question... Il est pourtant bien implémenté quelque part....
    Un fichier .c est censé contenir la définition (l'implémentation) des fonctions.

    Au fait, on est bien d'accord sur le vocabulaire ?

    http://emmanuel-delahaye.developpez....tm#definitions

    EDIT : OK, j'ai enfin compris ta question... Les .c qui implémentent les fonctions ne font pas forcément partie de ton projet. En effet, le plus souvent, quand on utilise une bibliothèque tierce (comme asterisk), on a que les .h (interfaces) et les .a ou .lib (implémentation compilée en code machine encore appelée 'bibliothèque'...) qui dont liés directement au projet (gcc: -lxxx)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Oui oui pardon pour mon manque de précision. Je ne trouve pas la déclaration des fonctions.

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini Voir le message
    Oui oui pardon pour mon manque de précision. Je ne trouve pas la déclaration des fonctions.
    Euh, les déclarations (ou plutôt les prototypes séparés) sont dans les fichiers d'interface (.h).

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Ok en fait les déclarations sont faites via la compilation ou non un include "...h", J'ai bien compris ?

    Donc si je voulais reprendre le .c pour l'intégrer dans un programme personnel, il faudrait que je créé mon propre .h pour implémenter ses fonctions ? C'est bien ça ?

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini Voir le message
    Ok en fait les déclarations sont faites via la compilation ou non un include "...h", J'ai bien compris ?
    Les prototypes séparés (déclarations séparées) sont placés dans des fichiers .h (header, entête, interface) qui sont inclus (#include <> ou "") partout où on a besoin d'appeler ces fonctions, y compris dans le .c qui définit les fonctions. Tu n'as jamais pratiqué la compilation séparée (programmation modulaire) ? C'est indispensable dans les vrais projets.

    A lire de A à Z :

    http://emmanuel-delahaye.developpez.com/codage.htm

    Donc si je voulais reprendre le .c pour l'intégrer dans un programme personnel, il faudrait que je créé mon propre .h pour implémenter ses fonctions ? C'est bien ça ?
    Je vois que tu continues de mélanger les mots du vocabulaire...

    Le .c qui contient quoi ?

    Je reprends.

    Un bibliothèque 'tierce' est composée d'au moins :
    • Un fichier d'interface (.h) qui contient les prototypes des fonctions de la bibliothèque et tout ce qui est nécessaire pour définir ces prototypes (constantes, types, structures).
    • Un fichier d'implémentation (.a ou .lib) qui contient le code compilé des fonctions.

    On a généralement pas accès aux .c qui contiennent le code source des fonctions. Mais si c'est une bibliothèque 'libre' (Open source, GNU etc.), tu as accès aux sources sur le site primaire (au besoin, les réclamer au responsable). Mais c'est rarement utile, sauf si tu veux les recompiler pour une plateforme particulière (mais le code est-il portable, c'est pas sûr).

    C'est clair ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Ok merci, j'ai bien compris.

    En fait, ce que je ne comprends pas dans le programme que j'étudie, c'est que ne retrouve pas le fichier .h dans lequel se trouve les prototypes des fonctions définis dans le fichier .c....

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini Voir le message
    En fait, ce que je ne comprends pas dans le programme que j'étudie, c'est que ne retrouve pas le fichier .h dans lequel se trouve les prototypes des fonctions définis dans le fichier .c....
    OK. Tu as fait une recherche dans tous les .h avec grep, par exemple ?

    Au fait, de quel fichier .c parles-tu ? Tu peux en publier les premières lignes (les #include ...)

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include "asterisk.h"
     
    ASTERISK_FILE_VERSION(__FILE__, "$Revision: 93182 $")
     
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <sys/ioctl.h>
    #include <net/if.h>
    #include <errno.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <netdb.h>
    #include <sys/signal.h>
    #include <signal.h>
    #include <netinet/in.h>
    #include <netinet/in_systm.h>
    #include <netinet/ip.h>
    #include <arpa/inet.h>
    #include <ctype.h>
     
    #include "asterisk/lock.h"
    #include "asterisk/channel.h"
    #include "asterisk/config.h"
    #include "asterisk/logger.h"
    #include "asterisk/module.h"
    #include "asterisk/pbx.h"
    #include "asterisk/options.h"
    #include "asterisk/lock.h"
    #include "asterisk/sched.h"
    #include "asterisk/io.h"
    #include "asterisk/rtp.h"
    #include "asterisk/acl.h"
    #include "asterisk/callerid.h"
    #include "asterisk/cli.h"
    #include "asterisk/say.h"
    #include "asterisk/cdr.h"
    #include "asterisk/astdb.h"
    #include "asterisk/features.h"
    #include "asterisk/app.h"
    #include "asterisk/musiconhold.h"
    #include "asterisk/utils.h"
    #include "asterisk/causes.h"
    #include "asterisk/dsp.h"
    #include "asterisk/devicestate.h"
    #include "asterisk/stringfields.h"
    #include "asterisk/abstract_jb.h"
     
    #ifndef IPTOS_MINCOST
    #define IPTOS_MINCOST 0x02
    #endif
    Oui j'ai fais des grep et impossible de trouver la fonction dans les autres fichiers....

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include "asterisk.h"
     
    ASTERISK_FILE_VERSION(__FILE__, "$Revision: 93182 $")
     
    <...>
    Oui j'ai fais des grep et impossible de trouver la fonction dans les autres fichiers....
    3 points à éclaircir.
    • Ce fichier s'appelle comment ?
    • Tu as bien fait un grep dans les .h ?
    • Quand tu dis "trouver la fonction", tu parles bien du prototype de la fonction ?

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Le fichier c'est chan_mgcp.c. J'ai bien fais une recherche dans les fichiers .h et c'est bien du prototype que je parle.

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini Voir le message
    Le fichier c'est chan_mgcp.c. J'ai bien fais une recherche dans les fichiers .h et c'est bien du prototype que je parle.
    OK. Tu as fait une recherche récursive (dans les sous répertoires ?)

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Oui !

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini Voir le message
    Oui !
    et tu es absolument certain de l'orthographe de ce que tu recherches ?

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Oui ! ;-)

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini Voir le message
    Oui ! ;-)
    J'ai épuisé les ressources. J'ai du mal à croire qu'une fonction publique (elle n'est pas 'static' ?) soit utilisée sans prototype.

    Au fait, pourquoi tu voulais ça ? Comment as-tu eu connaissance de l'existence de cette fonction ? C'est bien une fonction 'utilisateur' ?

Discussions similaires

  1. Ou sont mes enregistrements à partir de 8126 ?
    Par AIexis dans le forum Requêtes
    Réponses: 7
    Dernier message: 30/01/2006, 14h03
  2. [VB.net] Où sont mes contrôles ?
    Par waici dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/01/2006, 09h15
  3. [MFC] Ou sont mes boutons de toolbar?
    Par foxblue dans le forum MFC
    Réponses: 3
    Dernier message: 08/09/2005, 14h42
  4. URPMI - Où sont mes programmes ?
    Par Dnx dans le forum Mandriva / Mageia
    Réponses: 2
    Dernier message: 25/09/2004, 21h57

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