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 :

inclure un fichier1.c dans un fichier2.c


Sujet :

C

  1. #1
    Membre confirmé Avatar de landryx
    Inscrit en
    Décembre 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 145
    Par défaut inclure un fichier1.c dans un fichier2.c
    Bonjour!

    est-ce qu'il est possible d'inclure un fichier par exemple fichier1.c dans un fichier2.c comme on pourrait inclure un fichier.h??
    Si oui, quelle serait la syntaxe d'inclusion?

    Merci d'avance!!

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    La syntaxe l'interdit pas mais c'est tres gore comme pratique.
    Si tu veux utiliser des fonctions qui sont definies dans un autre module .c, il faut avoir un .h correspondant qui déclare ces fonctions et ensuite inclure ce .h.

  3. #3
    Membre confirmé Avatar de landryx
    Inscrit en
    Décembre 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 145
    Par défaut inclure un fichier1.c dans un fichier2.c
    Merci pour la reponse..mais ça ne m'avance pas tellement ..En fait nous avons un projet en programmation avancée et il ya beaucoup de fichier à inclure notamment celui contenant les fonctions qui est à inclure dans le menu principal..
    Et en fait ya notre prof qui insiste sur les inclusions avec les fichiers.C mais il ne nous en a pas dit plus.

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566

  5. #5
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921

  6. #6
    Membre confirmé Avatar de landryx
    Inscrit en
    Décembre 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 145
    Par défaut inclure un fichier1.c dans un fichier2.c
    Bonjour!!

    Merci pour les liens...Je crois que j'ai à peu pres compris ce qu'il fallait faire..D'apres ce que j'ai lu les icnlusions ne se font qu'avec des fichiers.h ....
    Mais j'ai pas tres bien compris le principe de la compilation séparée.... ..
    Serait-ce une autre façon d'utiliser un makefile?

    Help!!
    Merci ...

  7. #7
    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,


    Je dirais plutôt qu'un makefile est là pour automatiser la compilation séparée, mais il n'est pas nécessaire d'utiliser un makefile pour faire de la compilation séparée. Voici un exemple de compilation séparée à la main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /* fichier hello.h: c'est là que tu déclares tes fonctions */
     
    /* garde contre contre les inclusions multiples */
    #ifndef H_TC_HELLO_20061215140628 
    #define H_TC_HELLO_20061215140628
     
    /* On déclare la fonction affiche_hello */
    void affiche_hello(void);
     
    #endif /* fin de la garde H_TC_HELLO_20061215140628*/
    Tu devras inclure le fichier hello.h dans chaque fichier source où tu utilises la fonction affiche_hello(), ainsi que dans le fichier source où elle est définie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /*fichier hello.c: ici, on définit la fonction affiche_hello() */
    #include <stdio.h>
    /* Tu dois utiliser le fichier d'en-tête hello.c pour "lier" le fichier client (qui
        utilise les fonctions définie dans hello.h et le fichier de définition e.g. hello.c */
    #include "hello.h"
     
    void affiche_hello(void)
    {
        printf("Hello developpez.com!\n");
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /* fichier main.c: ici, on utilise la fonction affiche_hello()*/
    include <stdlib.h>
    #include "hello.h" /* On utilises la fonction, donc on inclut hello.h*/
     
    int main(void)
    {
        affiche_hello();
     
        return EXIT_SUCCESS;
    }
    Pour compiler tout cela, tu n'est pas obligé d'avoir un makefile (je suppose ici que tu utilises gcc en ligne de commande. Avec Code::Blocks, tout ce processus se fait de manière transparente):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc -c -o hello.o hello.c
    gcc -c -o main.o main.c
    et maintenant, on fait l'édition des liens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -o hello hello.o main.o
    Lorsque le nombre de fichiers sources devient supérieur à 2, il devient intéressant de recourir à un makefile pour deux raisons:
    1) pas besoin de taper toutes les lignes de commande à la main
    2) avec make, seuls les fichiers modifiés seront recompilés ainsi que ceux qui dépendent de ces fichiers. Par exemple, si tu modifies, le fichier main.c uniquement, tu n'as pas besoin de recompiler hello.c. make fait donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc -c -o main.o main.c
    gcc -o hello hello.o main.o
    Voici comment écrire le makefile pour la compilation de ce micro-projet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #Makefile
     
    hello: main.o hello.o
        <tab>gcc -o $@ $^
     
    main.o: main.c hello.h
        <tab>gcc -c -o $@ $<
     
    hello.o: hello.c hello.h
        <tab>gcc -c -o $@ $<
    Pour résumer, bien que l'utilisation d'une makefile soit la plupart du temps liée à la compilation séparée d'un projet (processus que make permet d'automatiser), le concept de compilation séparée est indépendant de make et mérite d'être étudié en détail lors de l'apprentissage du langage C, car il permet d'organiser un projet de façon efficace.

    Je suis surpris que le concept de compilation séparée n'aparaisse que dans un cours de programmation avancée. Je mettrais cela déjà dans un cours d'introduction au langage C.

    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++

    +

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par mujigka
    [CODE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #Makefile
     
    hello: main.o hello.o
        <tab>gcc -o $@ $^
     
    main.o: main.c hello.h
        <tab>gcc -c -o $@ $<
     
    hello.o: hello.c hello.h
        <tab>gcc -c -o $@ $<
    Si tu veux générer l'ensemble des dépendances automatiquement, je te donne une astuce qui n'est pas forcement connu (on le voit nul part) :

    Compile avec l'option -MM l'ensemble des tes fichiers c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    gcc -MM *.c
     
    fournit :
    main.o: main.c hello.h
    hello.o: hello.c hello.h
    Bon là, ca parait ridicule car il n'y a que deux fichiers, mais ça peut être sympa quand il y en a plus.

    Enfin, si on fait de la compilation dans des dossiers séparés, ça ne marche plus A moins qu'il y ait une astuce que je ne connaisse pas.

  9. #9
    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
    Merci millie pour tes précisions. La gestion automatique des dépendances d'un projet est un problème intéressant. J'ai repris il y a un an un projet d'IDE appelé CWorkshop initié sur developpez.com (initialisé à l'époque par Franck Hecht) puis abandonné par la suite. Je travaille actuellement sur un gestionnaire de makefile et/ou SConstruct files (outils scons) et le problème des dépendances me cause quelques soucis. J'ai considéré utiliser le retour de gcc -MM dans ce projet, mais bon, je ne travaille qu'occasionnellement dessus.

    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++

    +

  10. #10
    Membre confirmé Avatar de landryx
    Inscrit en
    Décembre 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 145
    Par défaut
    Salut millie

    Pour un peu plus de precision:est-ce que la ligne de commande gcc -MM *.c compilerait tout un repertoire ne contenant que des fidhier .c ??

  11. #11
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Non non, ça ne compile rien du tout (à cause de l'option MM).

    Cela ne fait que donner (dans le terminal) les dépendances entre les fichiers (il n'ira voir que ceux qui finissent pas .c).

    EDIT : Par exemple comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    declaration.o: declaration.c declaration.h tabSymboles.h tabChaines.h
    interNum.o: interNum.c interNum.h tabSymboles.h tabChaines.h
    label.o: label.c label.h
    tabChaines.o: tabChaines.c tabChaines.h
    tabObjets.o: tabObjets.c tabObjets.h
    tabSymboles.o: tabSymboles.c tabSymboles.h tabChaines.h
    traitement.o: traitement.c tabSymboles.h tabChaines.h interNum.h \
      declaration.h label.h traitement.h
    traitementExpr.o: traitementExpr.c tabSymboles.h tabChaines.h interNum.h \
      declaration.h label.h traitement.h traitementExpr.h

  12. #12
    Membre confirmé Avatar de landryx
    Inscrit en
    Décembre 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 145
    Par défaut
    ok merci pour la précision!!

  13. #13
    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 landryx
    est-ce qu'il est possible d'inclure un fichier par exemple fichier1.c dans un fichier2.c
    C'est techniquement possible, mais c'est une pratique le plus souvent déplorable. Que veux tu faire exactement ?

  14. #14
    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 landryx
    Et en fait ya notre prof qui insiste sur les inclusions avec les fichiers.C mais il ne nous en a pas dit plus.
    Change de prof, et vite.

  15. #15
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    salut,
    Citation Envoyé par millie
    Enfin, si on fait de la compilation dans des dossiers séparés, ça ne marche plus A moins qu'il y ait une astuce que je ne connaisse pas.
    Je viens de faire un petit test (car j'ai appris avec plaisir cette astuce), si tu lance une commande du genre de
    $ gcc *.cpp dossier1/*.cpp dossier2/*.cpp
    il semble aller chercher dans l'ensemble des sous dossier que tu as indiqué...

    (par contre, il refuse un truc du genre de ./*/*.cpp)

    Il devrait donc y avoir moyen pour "piper" un ls avec cette commande, et permettre de lui fournir l'ensemble des dossiers, non

    (enfin, étant sous windows, pour l'instant, et pour etre honnete, c'était la commande
    c:\mingw\bin\gcc.exe -MM *.cpp /dossier1/*.cpp
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  16. #16
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    En fait, je pensais au dossier de sortie (ou se trouve les fichiers .o) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(OBJFOLDER)/tabObjets.o: ./src/tabObjets.c ./src/tabObjets.h
    	$(CPP) $(CFLAGS) ./src/tabObjets.c -o  $(OBJFOLDER)/tabObjets.o
    Mais n'étant absoluement pas pro de Makefile (faut avouer que j'aime bien que Code::blocks me le fasse automatiquement), il y a peut être un moyen de ruser pour faire cela

  17. #17
    Membre confirmé Avatar de landryx
    Inscrit en
    Décembre 2006
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 145
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Change de prof, et vite.
    Je changerai bien de prof mais je crois que je vais devoir me faire à celui que j'ai.
    Sinon pour l'inclusion de fichiers j'ai finalement tout mis dans un fichier.h que j'ai inclus dans le fichier principal;c'est plus simple... Mais apres si il est possible d'inclure des fic.c serait-il possibme d'en avoir la syntaxe svp ? (à Emmanuel Delahaye)




    HELP!!
    merci d'avance

  18. #18
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par landryx
    Je changerai bien de prof mais je crois que je vais devoir me faire à celui que j'ai.
    Sinon pour l'inclusion de fichiers j'ai finalement tout mis dans un fichier.h que j'ai inclus dans le fichier principal;c'est plus simple... Mais apres si il est possible d'inclure des fic.c serait-il possibme d'en avoir la syntaxe svp ? (à Emmanuel Delahaye)




    HELP!!
    merci d'avance
    Rassure moi quand tu dis que tu as tout mis dans le fichier .h tu parles pas de code hein?

    Pas de code dans un .h seulement inclusion, define, prototypes... Mais pas de code.

    Ben pour include un .c c'est pareil que pour un .h. Si tu veux tu peux inclure n'importe quoi, tant que ce qu'il y a dedans est du C.

    #include <fichier.dtc> ca fonctionne.

  19. #19
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    #include <fichier.dtc> ca fonctionne.
    #include <fichier.lol>

  20. #20
    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
    Citation Envoyé par landryx
    Je changerai bien de prof mais je crois que je vais devoir me faire à celui que j'ai.
    Sinon pour l'inclusion de fichiers j'ai finalement tout mis dans un fichier.h que j'ai inclus dans le fichier principal;c'est plus simple... Mais apres si il est possible d'inclure des fic.c serait-il possibme d'en avoir la syntaxe svp ? (à Emmanuel Delahaye)
    C'est possible d'include un fichier d'implémentation avec l'extension .c avec la même syntaxe qu'un fichier d'en-tête avec l'extension .h. En ce qui concerne ma maigre expérience en programmation, IL N'EST JAMAIS NECESSAIRE D'INCLURE UN FICHIER .c, de la même manière qu'IL EST FORTEMENT DECONSEILLE DE PLACER DU CODE DANS UN FICHIER D'EN-TETE. Les fichiers d'en-tête ne sont pas faits pour cela, mais sont réservés aux déclarations de prototypes de fonctions, définitions de macros, etc.

    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++

    +

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. inclure une page html dans une autre
    Par jani dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/08/2005, 19h28
  2. Inclure un bloc style dans le body
    Par zoullou dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 29/11/2004, 11h00
  3. Inclure de l'ASM dans du C
    Par Condor7 dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 22/05/2004, 14h57
  4. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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