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 :

Pourquoi ces directives #ifndef ... en haut des .h


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 55
    Points : 78
    Points
    78
    Par défaut [Résolu] Pourquoi ces directives #ifndef ... en haut des .h
    J'ai pu remarquer les directives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef _STDIO_H
    #define _STDIO_H
    en tête du fichier stdio.h. Pourquoi ces lignes ? et pourquoi y a t'il pour certain fichier header 2 underscore devant le mot __STDIO_H

    Merci d'avance pour vos lumière.
    Pat !

  2. #2
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    salut,

    c'est pour quand tu as un grand projet et que plusieurs .cpp font appels aux mêmes .h, s'il est inclus, il se définit par les #ifdef _STDIO_H_, si un autre cpp l'inclus, le compilo va voir qu'il y a déjà un _STDIO_H_ de définis, il ne va donc pas le réinclure, ça t'évite des problèmes de redéfinition de fonctions.

    Pour les underscore, c'est comme le programmeur le sent, il peut mettre __STDIO_H__ ou _STDIO_H_ ou encore STDIO_H, c'est pareil.

    Attention toutefois que certains mots commençant par un seul underscore sont réservés.

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Hypnos
    salut,

    c'est pour quand tu as un grand projet et que plusieurs .cpp font appels aux mêmes .h, s'il est inclus, il se définit par les #ifdef _STDIO_H_, si un autre cpp l'inclus, le compilo va voir qu'il y a déjà un _STDIO_H_ de définis, il ne va donc pas le réinclure, ça t'évite des problèmes de redéfinition de fonctions.
    C'est presque ca, il n'empeche pas qu'un fichier source inclue le contenu d'un header si un autre fichier source l'a deja inclu (heureusement sinon il y aurait pas mal d'erreur et de warning a la compilation), mais plutot qu'un fichier d'en-tete ne soit pas inclu deux fois (par etourderie des developpeurs ou parce qu'il est lui meme inclue dans un autre header) dans le meme fichier source.

  4. #4
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    euh...oui, tu pourrais approfondir STP ? Tu fais une différence entre fichiers d'en-tête et header ?
    Ou bien tu fais juste la distinction entre inclus dans le cpp et dans le projet ?

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Hypnos
    euh...oui, tu pourrais approfondir STP ? Tu fais une différence entre fichiers d'en-tête et header ?
    Ou bien tu fais juste la distinction entre inclus dans le cpp et dans le projet ?
    Non je ne fais pas de distinction entre fichier d'en-tete et header, c'est la meme chose.
    Mon propos etait de clarifier un petit point dans tes propos. J'ai compris dans ton explication que si tu incluais un meme .h dans deux fichiers .cpp distinct, le contenu n'etait en fait inclus que dans un seul a la compilation si le #ifndef... est present. Or dans un tel cas, le contenu du .h est bien rajoute au deux fichiers .cpp.
    Le mecanisme de protection des .h avec le #ifndef, etc. fait que si tu inclus deux fois un .h dans un .cpp, seul la premiere inclusion rajoute le contenu du .h dans le .cpp.
    J'espere avoir ete plus clair ce coup.

  6. #6
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    oui c'est vrai que comme ça c'est bien plus clair .
    Et je suis tout à fait d'accord.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 55
    Points : 78
    Points
    78
    Par défaut
    Pour moi aussi c'est très claire.

    Merci pour vos réponses.

  8. #8
    Membre averti

    Inscrit en
    Juin 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par Hypnos
    Pour les underscore, c'est comme le programmeur le sent, il peut mettre __STDIO_H__ ou _STDIO_H_ ou encore STDIO_H, c'est pareil.

    Attention toutefois que certains mots commençant par un seul underscore sont réservés.
    Les mots contenant '__' (double) sont réservés au langage C++. Autant être prévoyant.
    Les mots commençant/finissant par '_' (simple), c'est plus compliqué, il y a une histoire de majuscule/minuscule et de portée. Autant les éviter.

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 55
    Points : 78
    Points
    78
    Par défaut
    Merci.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/09/2007, 16h45
  2. Pourquoi ces erreurs
    Par dedesite dans le forum C++
    Réponses: 14
    Dernier message: 16/01/2007, 14h32
  3. Lien direct vers un plan des Pages Jaunes
    Par freija dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2007, 15h37
  4. Pourquoi Access me rajoute-t-il des décimales ?
    Par DjBeGi dans le forum Access
    Réponses: 2
    Dernier message: 15/06/2006, 12h08

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