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 :

syntaxe pour compilation conditionnelle ?


Sujet :

C

  1. #1
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut syntaxe pour compilation conditionnelle ?
    Bonjour,

    Je voudrais savoir quel est la syntaxe exacte lorsqu'on veut éviter les inclusions multiple de fichier. J'ai en effet vu plusieurs versions.
    exemple pour un fichier : fichier.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef   FICHIER_H
    #define  FICHIER_H
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef   _FICHIER_H_INC
    #define  _FICHIER_H_INC
    ou bien alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef   __FICHIER__
    #define  __FICHIER__
    Je ne sais donc pas quel est la bonne syntaxe à adopter ni quel est la
    signification (s'il y en a une) au niveau de la position des underscores.

    Pour l'instant j'utilise la syntaxe du 1er exemple (qui me parait + logique)
    mais si quelqu'un pouvait m'expliquer les raisons de toutes ces différentes syntaxes ce serait sympa ;-)

    Merci

    Tintin72

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    techniquement ya pas de differences:
    mais je sais que certaines syntaxes sont "reservee", malheuresement je n'en sais pas plus
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    La seule regle est d'eviter le underscore au debut (genre _MATH_H). L'implementation se reserve ces identifiants. Apres, on fait ce que l'on veut, du moment que la macro est unique.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Je conseil la lecture de ceci : http://emmanuel-delahaye.developpez.com/codage.htm
    Regarder le paragraphes sur les fichier d'en-têtes
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: syntaxe pour compilation conditionnelle ?
    Citation Envoyé par tintin72
    Je voudrais savoir quel est la syntaxe exacte lorsqu'on veut éviter les inclusions multiple de fichier. J'ai en effet vu plusieurs version.
    exemple pour un fichier : fichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef  FICHIER_H
    #define  FICHIER_H
    Bien mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #ifndef  H_FICHIER
    #define  H_FICHIER
    est encore mieux.

    http://emmanuel-delahaye.developpez....nom_underscore
    http://emmanuel-delahaye.developpez....ganiser_source
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut Re: syntaxe pour compilation conditionnelle ?
    Citation Envoyé par Emmanuel Delahaye
    Bien mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #ifndef  H_FICHIER
    #define  H_FICHIER
    est encore mieux.
    Je te crois, mais il y a une raison objective pour vouloir mettre le "H_" devant ? Personnellement, j'utilise
    qui a recemment remplace le trop long
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #ifndef FICHIER_INCLUDED
    Et je ne vois rien de reprehensible la-dedans...

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: syntaxe pour compilation conditionnelle ?
    Citation Envoyé par DaZumba
    Citation Envoyé par Emmanuel Delahaye
    Bien mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #ifndef  H_FICHIER
    #define  H_FICHIER
    est encore mieux.
    Je te crois, mais il y a une raison objective pour vouloir mettre le "H_" devant ?
    Oui, c'est pour éviter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /* err.h */
    #ifndef ERR_H
    #define ERR_H
    qui briserait la regle qui dit que les identificateurs commençant par E suivi d'une majuscule sont réservées à l'implémentation. (Les constantes 'erreurs', précisément, c'est à dire les valeurs définies de errno).
    • Certains sont définies par le langage C
    • D'autres par POSIX.1
    • D'autres enfin par le compilateur (à éviter pour des problèmes de portabilité).
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut Re: syntaxe pour compilation conditionnelle ?
    Citation Envoyé par Emmanuel Delahaye
    (...) qui briserait la regle qui dit que les identificateurs commençant par E suivi d'une majuscule sont réservées à l'implémentation.
    J'ignorais cette regle. Merci pour cela !

  9. #9
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef __FICHIER__ 
    #define __FICHIER__
    Je n'ai pas encore eu de problèmes.
    Mais biensur à éviter avec des noms "courts"

    __ERR__
    ou __C__ ou autres... cela parait logique !
    Idem pour la méthode à Emmanuel

    Si tu fais H_ERR ou H_FILE ou je ne sais quoi, c'est certain que tu auras un problème un moment ou un autre.

    Plus c'est cour, plus il y a de chance que cela soit déjà défini quelque part.

    J'utilise le nom de la lib en plus dedans pour être sur de sur
    donc généralement __FICHIERGD__
    si le nom de la lib est GD, mais tu peux faire __FICHIER_GD__
    ou encore H_FICHIER_GD ou H_GD_FICHIER. Enfin tu as le choix, le but étant de ne pas avoir 2 fois le même pour toi et en incluant les projets d'autres personnes.

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Ti-R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef __FICHIER__ 
    #define __FICHIER__
    Je n'ai pas encore eu de problèmes.
    Comment tu le sais ? Des __xxx__ il y en plein les fichier .h des implémentations. C'est fait exprès pour que ça ne clashe pas avec l'utilisateur. Si l'utilisateur utilise les mêmes __xxx__, , le comportement est indéfini. Tout peut arriver, y compris un bug silencieux qui sortira le jour de la démo...
    Mais biensur à éviter avec des noms "courts"

    Si tu fais H_ERR ou H_FILE ou je ne sais quoi, c'est certain que tu auras un problème un moment ou un autre.

    Plus c'est cour, plus il y a de chance que cela soit déjà défini quelque part.
    Ca, c'est un autre problème.

    http://emmanuel-delahaye.developpez....ganiser_source

    J'utilise le nom de la lib en plus dedans pour être sur de sur
    donc généralement __FICHIERGD__
    si le nom de la lib est GD, mais tu peux faire __FICHIER_GD__
    ou encore H_FICHIER_GD ou H_GD_FICHIER. Enfin tu as le choix, le but étant de ne pas avoir 2 fois le même pour toi et en incluant les projets d'autres personnes.
    Non, tu n'as pas le choix. Les __xxx et les _[A-Z]xxx sont réservés à l'implémentation. C'est pourtant clair, non ?

    __FICHIERGD__ -> interdit à l'utilisateur
    H_FICHIER_GD -> autorisé
    H_GD_FICHIER -> autorisé
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/08/2007, 14h37
  2. [analyse de syntaxe] pour C et C++ sur Linux
    Par Madmac dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/07/2004, 06h37
  3. [windows] recherche outils coloration syntax. pour -> htm
    Par hpfx dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 02/10/2003, 01h52
  4. [CODE] Compilation conditionnelle ?
    Par Cornell dans le forum Langage
    Réponses: 3
    Dernier message: 16/09/2003, 18h16
  5. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 15h51

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