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 :

#ifnedef __POUET__H__


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut #ifnedef __POUET__H__
    Bonjour,

    J'ai trouvé le source d'un petit programme, avec des fichiers .h.

    Disons que l'un s'appelle pouet.h

    A l'intérieur, je trouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef __POUET__H__    // 1ère ligne du fichier
    #define __POUET__H__
     
    // ...contenu divers et varié...
     
    #endif                  // dernière ligne du fichier
    A quoi sert donc cette macro (?) ??

    IL semble qu'il soit courant d'utiliser des macros avec un nom dérivé du nom du fichier .h. A quoi cela sert-il ?

    Le fichier pouet.h ne contient pas d'include; alors où pourrait donc être défini __POUET__H__, et pourquoi ce ifndef ? Et une fois défini, à quoi sert-t-il ? __POUET__H__ n'est utilisé nulle part.

    Merci.

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Février 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Février 2003
    Messages : 95
    Par défaut
    Il s'agit d'une protection contre les inclusions multiples.

    A la première inclusion, le symbole n'est pas défini, on inclus l'ensemble du contenu du fichier et on définit le symbole.
    A la seconde inclusion, le symbole est défini, on ne fait rien.
    => Le contenu du fichier n'est inclus qu'une seule fois.

    Cordialement,

    Mathieu Driesbach.

  3. #3
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    cf. FAQ C++ (j'ai pas fait le tour de la FAQ C, je pense que ça y est?)

    http://c.developpez.com/faq/cpp/?pag...ASS_header_cpp

  4. #4
    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 Re: #ifnedef __POUET__H__
    Citation Envoyé par oodini
    J'ai trouvé le source d'un petit programme, avec des fichiers .h.

    Disons que l'un s'appelle pouet.h

    A l'intérieur, je trouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef __POUET__H__    // 1ère ligne du fichier
    #define __POUET__H__
     
    // ...contenu divers et varié...
     
    #endif                  // dernière ligne du fichier
    A quoi sert donc cette macro (?) ??
    Protection contre les inclusions multiples du même header dans la même unité de compilation. Le risque existe si A inclus B d'une part, C inclus B d'autre part, et qu'enfin X inclu A et C.

    On inclus donc 2 fois B, La première fois c'est OK, la deuxième fois, B est tout simplement ignoré, et ce quelque soit l'ordre d'inclusion de A et C dans X.

    http://emmanuel-delahaye.developpez....ganiser_source
    http://emmanuel-delahaye.developpez.....htm#organiser

    Attention, les identificateurs commençant par _ suivit de _A-Z sont réservés à l'implémentation. Ce que tu as vu est donc probablement un fichier d'entête de compilateur et non d'une application (si c'est le cas, le code n'est pas portable).

    http://emmanuel-delahaye.developpez....htm#id_reserve

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Merci, j'ai à présent ma réponse: pour se prémunir contre des inclusions multiples.

    Quoique, même si ça grossit la place prise en RAM après l'édition de liens,
    le résultat de la compilation ne doit pas varier ?...

    Pour la FAQ en C, je n'avais pas trouvé l'info.

  6. #6
    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 oodini
    Quoique, même si ça grossit la place prise en RAM après l'édition de liens,
    le résultat de la compilation ne doit pas varier ?...
    Meuh ? Tu parles de quoi là ?

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