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 d'entête et compilation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Par défaut Fichiers d'entête et compilation
    Bonjour ,
    Etant debutant en programmation langage C , malgré mes recherches je n'ai pas trouvé de reponse à ma question .
    Concernant les fonctions et leurs declarations :
    lors de la compilation d'un projet "x" , comprenant les fichiers suivant :
    fonction.h
    fonction.c
    main.c

    je compile donc pour avoir mon archive fonction.a ( librairie statique ) et pour avoir mon binaire main.o , et je lie le tout pour obtenir mon executable main .
    Jusque là j'ai compris , mais je bloque sur le fichier d'entête " fonction.h " qui comprend les declarations de ma fonction , je voudrai savoir pourquoi les fichiers d'entête ne sont pas lié lors de la compilation d'un projet ?

    en effet si je fais :

    gcc -c main.c

    gcc -c fonction.c

    ar -q fonction.a fonction.o

    gcc -o main main.c fonction.a

    Je vais obtenir mon executable "main" avec ma librairie "fonction.a" liée statiquement , mais :
    - Pourquoi fonction.h n'apparait pas dans les commandes de compilation ?
    - Comment sont integré les declarations de fonctions lors de la compilation ?
    - Apres compilation , l'executable "main" que j'aurai creé utilisera t'il toujours ce fichier d'entête " fonction.h " ?
    - Doit on conserver les fichiers d'entête ou doit on les supprimer aprés compilation ?
    Desolé si ma question peut paraitre stupide pour certains mais je debute en programmation et j'ai un peu de mal à comprendre l'utilisation des fichiers d'entête , c'est assez flou et je vous remercie par avance de m'eclairer sur ces points .
    Merci pour votre aide .
    jnoel

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, en fait en fichier .h commence comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef _FICHIER_H
    #define _FICHIER_H
     
    ton "code"
     
    #endif
    ceci évite d'avoir des inclusions multiples. Dans ton fichier .c quand tu fais

    #include "fichier.h"

    le compil va "recopier" ton fichier .h dans ton fichier .c
    Ne t'en souci pas quand tu compiles. C'est le compilo qui ira les chercher.
    J'espère que ces qq infos répondent un peu à ta question...

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par jnoel666
    - Pourquoi fonction.h n'apparait pas dans les commandes de compilation ?
    Parce qu'il est explicitement #included dans le code source. Ce serait redondant. Par contre, dans un Makefile, il est interessant de faire apparaitre les fichiers entetes comme dependances.
    - Comment sont integré les declarations de fonctions lors de la compilation ?
    Via un #include du fichier entete correspondant.
    - Apres compilation , l'executable "main" que j'aurai creé utilisera t'il toujours ce fichier d'entête " fonction.h " ?
    Bien sur que non. Comme les .c, d'ailleurs... [1]
    - Doit on conserver les fichiers d'entête ou doit on les supprimer aprés compilation ?
    En general, il est deconseille d'effacer le code source apres avoir obtenu l'executable. Et les fichiers entetes font tout a fait partie du code source. Ils permettent de decrire l'interface des fonctions qui se trouvent definies ailleurs que dans le fichier qui est compile.

    [1] Certains executables compiles en mode debug (-g) contiennent les noms des fichiers sources, afin que le debuggeur puisse faire correspondre les instructions machines aux lignes de codes originelles.

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Par défaut
    Merci pour vos explications claires et precises ça va bien m'aider merci encore les gars .

Discussions similaires

  1. Fichier d'entête pour ToString()
    Par Felipe_ dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/02/2008, 17h53
  2. JNI : à quoi sert le fichier d'entête géneré par javah ?
    Par Belgar dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 18/06/2007, 16h29
  3. les fichiers .class ne se compilent pas à la volé?
    Par talbi404 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 20/12/2006, 19h39
  4. usp10.h (cherche ce fichier d'entête)
    Par Hibou57 dans le forum Windows
    Réponses: 2
    Dernier message: 12/11/2006, 14h55
  5. [Tomcat]Les fichiers *.class et la compilation
    Par scifire dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 23/09/2005, 12h31

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