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 :

Les includes et les headers!?


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut Les includes et les headers!?
    Bonjours a tous,
    Je suis en train d'apprendre le C et je dois faire un programme pour mon cours de programmation C.
    En gros je dois creer un sorte de base de donnee moi meme (en C donc) dans des fichiers texte et mon appli permettra d'avoir des infos, d'ajouter/supprimer des champ,etc...
    mon probleme est que je ne sait pas trop quoi mettre des mes fichier .h , j'y met les prototypes de mes fonctions (jusque la ca va... ) mais dois-je aussi y mettre mes autres includes?
    j'ai 4 fichier .c et leur 4 fichier .h respectif:
    dans mon "main.c", je fais un include de "main.h".
    dans mon "main.h", je fais des include des librairies standard et des autres fichier .h dont j'ai besoin (tous en fait ). Est-ce correct?
    je fait pareil dans mes autres headers (librairies standard et les autres fichier .h dont j'ai besoin). Est-ce correct?
    Je fais aussi un #ifndef dans tout mes fichier.h et ca non plus, je ne sais pas si c'est correct

    Merci de m'aider

  2. #2
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut
    Bonjour,

    Ce que tu me dis me semble correct hormis que les autres include je les mettrais dans tesFonctions.c.

    Petit exemple qui sera plus imagé:

    main.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
    #include "tesFonctions.h"
     
    int main(){
     
    return 0;
     
    }
    tesFonctions.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef TESFONCTIONS_H  // Si TESFONCTIONS_H n'est pas défini alors
    #define TESFONCTIONS_H  // On défini TESFONCTIONS_H
     
    // Emplacement des prototypes
     
    #endif  // fin du ifndef
    tesFonctions.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include "tesFonctions.h" 
     
    // Tu implémentes tes fonctions ici (qui on été prototypés dans ton tesFonctions.h
    =)

    Bonne chance!

    ZhnaarX.

  3. #3
    Membre averti
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 16
    Par défaut
    dans mon "main.h", je fais des include des librairies standard et des autres fichier .h dont j'ai besoin (tous en fait ). Est-ce correct?
    je fait pareil dans mes autres headers (librairies standard et les autres fichier .h dont j'ai besoin). Est-ce correct?
    C'est correct oui, d'ailleurs si tu regardes certains headers de la librairie standard, ça se fait assez souvent. Mais la vraie question est : est-ce que tu en as vraiment besoin ?
    Je fais aussi un #ifndef dans tout mes fichier.h et ca non plus, je ne sais pas si c'est correct
    C'est même conseillé pour éviter les inclusions infinies...

    En fait, la règle est simple : un header doit avoir tout ce qu'il faut pour être compilable seul. Si il y a un paramètre de fonction FILE *, il doit inclure <stdio.h>. Si on y trouve un size_t dans une structure, il faut inclure <stddef.h>, etc.

    ++
    neow_

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut
    Merci pour vos reponses, ca m'as aidé car mon problème en fait (j'ai oublier d'en parler... ) etait que j'avais une structure dans un .h mais mon main.c ne le considerais pas et je savais pas pourquoi! mais j'ai modifier mes header et ca fonctionne! Merci

    pour repondre a neow_:
    Citation Envoyé par neow_ Voir le message
    Mais la vraie question est : est-ce que tu en as vraiment besoin ?
    non pas vraiment mais je pense que ce serais mieux visuellement!
    Citation Envoyé par neow_ Voir le message
    C'est même conseillé pour éviter les inclusions infinies...
    Oui je sais mais je ne savais pas si il fallais le faire dans TOUS ou simplement dans 1 seul!

    en tout cas, merci a vous deux

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Les règles sont simples :

    1- Le fichier d'en tête d'un module (.c et son .h associé) est constitué des informations nécessaires aux autres modules : c'est l'interface du module vers l'extérieur. Les informations qui ne sont utiles que dans ce module figureront dans le .c et seront donc masquées pour l'extérieur.

    2- Un fichier d'en tête doit être inclus (dans un autre .h ou dans un .c) si et seulement si c'est nécessaire. C'est une question de clarté et de maîtrise du code. La lecture des #include fait par un .h permet alors de voir alors les relations et interactions entre les différents modules du programme.

    3- Un .c fait (en général, ce n'est pas obligatoire) un #include de son .h associé. Ceci permet de vérifier la concordance des déclarations du .h avec les définitions du .c


    Un .h comporte donc essentiellement :

    - les prototypes des fonctions qui peuvent être utiles pour les autres modules. Les fonctions qui ne servent que dans ce module sont déclarées static dans le .c (qui peut lui comporter le prototype de ces fonctions).

    - les définitions de type utiles pour les autres modules, notamment celles figurant dans les prototypes des fonctions figurant dans le .h

    - des définitions de constantes utiles pour les autres modules (enum ou #define)

    - Des #include limités à ce qui est nécessaire à la compilation du .h lorsqu'il est inclus dans un .c quelconque.
    Par exemple si dans mon .h intervient un type FILE, je dois inclure dans le .h <stdio.h>. Si ce type FILE n'intervient que dans le .c, <stdio.h> doit être inclus dans le .c et pas dans le .h associé. Si il n'intervient ni dans le .h ni dans le .c, il ne doit pas être inclus du tout.

    - Par contre, comme il a vocation a être inclus dans plusieurs autres modules, il ne doit pas comporter de définitions de variables. Si on veut communiquer à d'autres modules une variable globale, elle sera défini dans le .c et déclarée extern dans le .h (avec le même type que lors de la définition dans le .c)

Discussions similaires

  1. Documentation : lister les include et les dépendences
    Par mybetacompany dans le forum Langage
    Réponses: 1
    Dernier message: 23/07/2014, 15h44
  2. Adieu les frames, bonjour les includes, mais.. problème !
    Par Phoenix0007 dans le forum Débuter
    Réponses: 1
    Dernier message: 06/12/2009, 20h02
  3. Petite question sur les include et les require
    Par saperlipopeye dans le forum Langage
    Réponses: 1
    Dernier message: 15/11/2009, 08h09
  4. Les #includes et les headers - Génie logiciel
    Par FroZman dans le forum C++
    Réponses: 8
    Dernier message: 11/05/2009, 16h51

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