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 :

Fichiers .h et .c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Par défaut Fichiers .h et .c
    Bonjour, je suis débute en C et j'ai une question en rapport à l'utilisation de fichiers en-têtes.

    Je m'explique, lorsqu'on fait un programme un peu compliqué, on écrit les fonctions dans un fichier .c différent de celui avec la fonction main(), et on écrit les prototypes de ces fonctionc dans un fichier .h qu'on met en en-tête avec #include, jusque là c'est bon.

    Le problème c'est que lorsque j'installe une bibliothèque (SDL par exemple), ou que je regarde dans les fichiers de mon IDE (code blocks), je trouve les fichier d'en-tête avec les prototypes des fonctions, mais je ne trouve aucun fichier .c avec la définition de ces fonctions. D'où ma question, où sont-ils donc?, seraient-ils compilés d'une manière spéciale, puisque pour la bibliothèque sdl par exemple, il n'y a aucun .c dans le zip qu'on peut télécharger sur leur site, et pourtant la bibliothèque fonctionne parfaitement aprés avoir mis les .h dans le répertoire de mon compilateur, et les .lib à leur place.

    J'aimerais en fait pouvoir écrire ma propre bibliothèque, regroupant un tas de fonctions que j'utilise régulièrement ou prévois d'utiliser, mais je ne voudrais pas à avoir à inclure les .c avec les définitions des fonctions dans chaque projet, juste les .h.

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    Le code exécutable se trouve dans des bibliothèques compilées qui sont destinées à être liées à ton programme soit statiquement (extension .lib ou .a selon le compilateur sous Windows, et extension .a avec préfixe lib sous unixoide), soit dynamiquement (extension .dll sous Windows ou .so sous unixoide). Tu ne disposes pas toujours des sources, sauf éventuellement pour les projets de bibliothèques open-source, comme c'est d'ailleurs le cas pour SDL.

    Sous linux, tu peux trouver ces fichiers de bibliothèques compilées sous /usr/lib ou /usr/local/lib ou autre chemins indiqués dans la variable d'environnement LD_LIBRARY_PATH. Sous Windows, les chemins vers les bibliothèques (comme pour les exécutables d'ailleurs) doivent être indiqués dans la variable d'environnement PATH.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  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 VinnieMc
    J'aimerais en fait pouvoir écrire ma propre bibliothèque, regroupant un tas de fonctions que j'utilise régulièrement ou prévois d'utiliser, mais je ne voudrais pas à avoir à inclure les .c avec les définitions des fonctions dans chaque projet, juste les .h.
    Pour réaliser une bibliothèque, c'est pas très dur. Il faut au minimum :

    Créer un fichier d'interface avec au moins un prototype de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifndef H_MYLIB
    #define H_MYLIB
    /* mylib.h */
     
    void mylib_myfunc(void);
     
    #endif /* guard */
    et un fichier d'implémentation avec le code de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /* mylib.c */
    #include "mylib.h"
     
    #include <stdio.h>
     
    void mylib_myfunc(void)
    {
       puts("Hello, this is mylib");
    }
    Ensuite, il suffit de compiler le fichier normalement, puis de créer une bibliothèque avec un 'librarian' (outil de création de bibliothèque).

    Son nom peut varier d'une implémentation à l'autre, ainsi que les détails d'utilisation. Le but est, à partir d'un ou plusieurs fichiers compilés, de réaliser un fichier unique qui contient tout le code des fonctions. (.a ou.lib selon l'implémentation).

    Avec Code::Blocks :
    1. créer un projet bibliothèque (library). Donner le nom qui va bien...
    2. ajouter mylib.h et mylib.c
    3. construire (build). C'est fini.

  4. #4
    Membre confirmé Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Par défaut
    Merci infiniment à tous les deux pour vos réponses claires et précises.


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

Discussions similaires

  1. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38
  2. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  3. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31
  4. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37
  5. Fichier PDOXUSRS.NET
    Par yannick dans le forum Paradox
    Réponses: 5
    Dernier message: 05/04/2002, 09h45

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