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 :

prog en modules


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par défaut prog en modules
    Bonjour,

    j'ai quelques petites questions concernant les .h.
    Normalement ils contiennent les prototypes des .c correspondant, et une protection contre les inclusions multiples, c'est ça?
    Que peuvent-ils contenir d'autre ?
    Notamment, les librairies .h doivent-elles être dans le .h ou dans le .c ?
    J'ai une fonction qui retourne un type évolué, cela implique-t-il que je doive écrire deux fois (dans le .c et le .h) le include de la librairie ?
    Pourrait-on mettre les librairies une seule fois ? (c'est conseillé?).

    Merci.

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Bonsoir,



    Citation Envoyé par elishac Voir le message
    j'ai quelques petites questions concernant les .h.
    Normalement ils contiennent les prototypes des .c correspondant, et une protection contre les inclusions multiples, c'est ça?
    Que peuvent-ils contenir d'autre ?
    Il peuvent contenir plein d'autre chose :

    * Des directive de preprocesseur (#include, #define, ...)
    * Des enums
    * Des structures
    ...

    J'en ai pas d'autre qui me vienne en memoire mais la liste ne doit pas etre fini.


    Citation Envoyé par elishac Voir le message
    Notamment, les librairies .h doivent-elles être dans le .h ou dans le .c ?
    Si tu parle des include, apparemment, peu importe leurs place. Pour ma part, j'ai l'habitude de mettre dans le .h tout les include necessaire


    Citation Envoyé par elishac Voir le message
    J'ai une fonction qui retourne un type évolué, cela implique-t-il que je doive écrire deux fois (dans le .c et le .h) le include de la librairie ?
    Pourrait-on mettre les librairies une seule fois ? (c'est conseillé?).
    Euh, la, j'ai pas tout saisie ... Par type evolué, tu dois certainement parler des structures. Voici un exemple tiré d'un de mes projet si cela peut t'aider :


    Le .h
    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
     
    #ifndef INDIVIDU_H
    #define INDIVIDU_H
     
    #include <stdlib.h>
    #include <stdio.h>
     
     
    typedef struct Individu Individu;
    struct Individu
    {
        int nombreVille;
        int *Tableau;
     
        double distanceTotal;
    };
     
    Individu CreationIndividu (int nombreVille, int villeDepart);
    void DestructionIndividu (Individu* aDetruire);
     
    void CalculerDistanceTotal (Individu* selectionner, double **TableauDistance);
    void CroisementIndividu (Individu* pere, Individu* mere, Individu* enfantPere, Individu* enfantMere);
    void MutationIndividu(Individu* mutant);
     
    #endif

    Et le .c correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include "Individu.h"
     
    /** Tout le code des prototype contenue dans le .h **/

    Voila, j'espere avoir repondu a tes question ^^

  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
    Que peuvent-ils contenir d'autre ?
    .h = déclarations (#define, typedef, déclarations de fonctions, déclarations de variables globales) + inclusions d'autres fichiers d'en-tête.

    .c = définitions (définitions des fonctions, définitions des variables globales). Les fichiers .c peuvent contenir des définitions privées, c'est-à-dire visibles uniquement dans ce fichier source.

    Notamment, les librairies .h doivent-elles être dans le .h ou dans le .c ?
    Pas clair. Déjà un .h n'est pas une library (et en français library se dit bibliothèque et non librairie, qui en anglais se dit bookstore en anglais), mais un constituant d'une library. Reformule bien ta question.

    J'ai une fonction qui retourne un type évolué, cela implique-t-il que je doive écrire deux fois (dans le .c et le .h) le include de la librairie ?
    Si le type est défini dans type_evolue.h et que mon_include.h inclut type_evolue.h, alors si dans mon_fichier_source.c tu inclus mon_include.h, tu n'as plus besoin d'inclure type_evolue.h. Tu sembles ne pas avoir pas encore bien compris le fonctionnement du préprocesseur, consulte les cours, tutoriels et FAQs relatifs à ce sujet.

    Pourrait-on mettre les librairies une seule fois ? (c'est conseillé?).
    Tu veux dire créer un fichier d'en-tête qui inclut presque tout ? Qu'est-ce qui t'en empêche ? Et ce n'est ni conseillé ni déconseillé, c'est une question de préférence. Par contre, si certains fichiers d'en-tête ne sont pas réellement utiles, tu perds inutilement du temps à la compilation (mais le programme généré sera le même).

    A propos des bibliothèques : La compilation séparée en C.

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par défaut
    Merci pour les réponses.
    Où est-ce que je dois mettre stdio.h ? (dans main.h où dans tous les .h du projet? Faut-il le mettre aussi dans les .c ?)
    Par type évolué, je voulais dire par exemple time_t.
    Où est-ce que je dois mettre le #include <time.h> ? (dans chaque .h qui utilise time_t, ou juste dans main.h ?)

    Le problème c'est que je trouve qu'il est contraignant d'avoir à ce demander pour chaque fichier quels sont les bibliothèques nécessaires, j'aimerais ne les mentionner qu'une seule fois... par exemple dans main.h. C'est possible/conseillé ?
    Chaque fichier .h contiendra alors un #include main.h, et chaque fichier .c le #include .h correspondant, et main.h ?

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Melem t'a deja donné ta reponse


    Citation Envoyé par Melem Voir le message
    .
    Tu veux dire créer un fichier d'en-tête qui inclut presque tout ? Qu'est-ce qui t'en empêche ? Et ce n'est ni conseillé ni déconseillé, c'est une question de préférence. Par contre, si certains fichiers d'en-tête ne sont pas réellement utiles, tu perds inutilement du temps à la compilation (mais le programme généré sera le même).

    Donc oui, si tu veux, tu fais un "main.h" qui tu inclu partout.
    Mais bon, je trouve que ca casse un peu la repartition des roles car dans mes .h, je met toutes les info et en general, 1 couple .h/.c == une definition de structure.

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par défaut
    Donc vous répétez #include <stdio.h> dans tous les fichiers .c et .h ?

  7. #7
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Pas exactement.

    Pour ma part, je fait toujours un couple .c/.h (ormis "constante.h").

    Ce qui fait que dans le .h que je protege, je mets toutes les declarations (prototype, strucuture, define ... et include !).

    Ce .h, je l'inclu dans son .c et c'est fini.


    Je t'ai donner un exemple dans un de mes precedent post.


    De toutes maniere, chaque .c etant compiler separment pour donner un .o, si dans un .c donné tu veux utiliser des fonction, il va bien falloir faire un include d'un .h.

  8. #8
    Inactif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par défaut
    Donc si j'ai bien compris, vous mettez dans les .h toutes les bibliothèques nécessaires au .c correspondant, et #include "xx.h" dans le .c ?
    Au final, vous avez donc écrit quasiment autant de #include <stdio.h> qu'il y a de .h ?
    N'est-ce pas un travail supplémentaire que de se demander, pour chaque .h, quelles sont les bibliothèques requises pour le .c correspondant ?

Discussions similaires

  1. compilation de prog multi-modules (bis)
    Par denispir dans le forum Débuter
    Réponses: 18
    Dernier message: 19/04/2012, 15h40
  2. Réponses: 2
    Dernier message: 29/01/2010, 09h26
  3. prog c++ pour envoyer sms vias module gsm
    Par carieliococs dans le forum C++
    Réponses: 7
    Dernier message: 12/03/2009, 20h38
  4. Existe-t-il un langage de prog "virtuel" en Français
    Par HRS dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 10/06/2002, 18h11

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