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 :

Précision sur les includes


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut Précision sur les includes
    Bonjour,

    Suite à un petit soucis d'inclusions de bibliothèques, je voudrais savoir si le schéma suivant est correct pour un programme en C.

    J'ai trois séries de fichiers A, B, et C (avec à chaque fois un .h et un .c).
    Dans les *.h sont stockés les déclarations des structures et des fonctions, les *.c contiennent les définitions des fonctions (déclarées dans leur fichier .h respectif).

    Mes fichiers sont liés de cette manière :
    - A.h inclu B.h et C.h
    - A.c inclu A.h
    - B.c inclu B.h et A.h
    - C.c inclu C.h et A.h
    - B.h et C.h n'ont pas d'inclusions vers mes fichiers, mais ils incluent tout deux la même bibliothèque lib.h...

    Est-ce que ce schéma est correct ?

    Plus précisement, mon doute concerne la bibliothèque lib.h : est-ce qu'on peut avoir des inclusions d'une même bibliothèque dans plusieurs fichiers .h différents (non liés directement entre eux) ?
    A savoir que tous mes .h ont une structure du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifndef ...
    #define ... 
     
    #include ... // Inclusions
    [...] // Déclarations
     
    #endif
    Merci de vos éclaircissements.

  2. #2
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Par défaut
    Ton probleme est si
    Fichier1 inclus Fichier2 qui inclus Fichier1 car alors tu va boucler dans les inclusions.

    Pour éviter cela il faut protégé tout les ".H" comme tu le fait à l'aide de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #ifndef ...
    #define ... 
     
    #endif
    Ton schema est donc forcement bon.


    Pour lib.h il faut esperer que la protection est faite, sinon
    A.c inclus A.h
    A.h inclus B.H et donc lib.h
    A.H inclus C.h et donc lib.h mais les simboles sont déjà défini donc probleme.

    Dans ce cas tu peux cependant ajouter une protection suplémentaire autour de chaque include de lib.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef ...
    #define ... 
     
    #ifndef __LIB_H__
    #define __LIB_H__
    #include <lib.h>
    #endif 
     
    #endif

  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 Fabllot Voir le message
    Suite à un petit soucis d'inclusions de bibliothèques, je voudrais savoir si le schéma suivant est correct pour un programme en C.

    J'ai trois séries de fichiers A, B, et C (avec à chaque fois un .h et un .c).
    Dans les *.h sont stockés les déclarations des structures et des fonctions, les *.c contiennent les définitions des fonctions (déclarées dans leur fichier .h respectif).
    OK.

    Mes fichiers sont liés de cette manière :
    - A.h inclu B.h et C.h
    Est-ce nécessaire ?
    - A.c inclu A.h
    OK.
    - B.c inclu B.h et A.h
    B.h, OK, mais A.h ? Pourquoi ? Dépendance ?
    - C.c inclu C.h et A.h
    Idem...
    - B.h et C.h n'ont pas d'inclusions vers mes fichiers, mais ils incluent tout deux la même bibliothèque lib.h...
    Bibliothèque ? Tu veux dire fichier d'entête ?
    Est-ce que ce schéma est correct ?
    Peut être, mais comme on a pas le détail des relatons et dépendances des fichiers, difficile d'en dire plus. J'espère qu'il y a une protection contre les inclusions multiples dans tous les .h, comme l'exige les Bonnes Pratiques.

    Plus précisement, mon doute concerne la bibliothèque lib.h : est-ce qu'on peut avoir des inclusions d'une même bibliothèque dans plusieurs fichiers .h différents (non liés directement entre eux) ?
    A condition qu'il s'agisse bien de fichier d'en tête (et non de bibliothèques), oui.
    A savoir que tous mes .h ont une structure du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifndef ...
    #define ... 
     
    #include ... // Inclusions
    [...] // Déclarations
     
    #endif
    Oui, mais ça n'a rien à voir. Cette protection agit contre les inclusions multiples du même .h dans le même .c.

    Par exemple :

    Mes fichiers sont liés de cette manière :
    - A.h inclu B.h et C.h
    - B.c inclu B.h et A.h
    B.c inclue 2 fois B.h. Le 2ème sera ignoré.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    C'est ce qui me semblait, même si mon architecture de fichiers n'est pas optimale, le schéma est tout à fait correct...

    Mon soucis vient donc d'ailleurs...
    Je pense donc que mon problème est lié à Visual / MFC / ressources, mais là, on sort du C et du cadre de ce forum...

    C'est "sentant" cela que j'avais déjà ouvert un post sur un autre forum... http://developpez.net/forums/showthread.php?t=399358

    Par ce post, je voulais juste avoir la confirmation, que je n'avais pas de problème lié directement au C.
    Merci à vous.

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

Discussions similaires

  1. [Dates] Précisions sur les include
    Par 78alex78 dans le forum Langage
    Réponses: 8
    Dernier message: 15/01/2007, 16h24
  2. [HTML][USEMAP] Précision sur les zones réactives
    Par cladsam dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/02/2006, 08h20
  3. Précisions sur les listes
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 07/02/2006, 21h20
  4. Précisions sur les recordset DAO
    Par Igricheff dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/01/2005, 17h16
  5. Précision sur les sauvegarde à chaud
    Par alxkid dans le forum Administration
    Réponses: 2
    Dernier message: 09/08/2004, 18h55

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