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 :

A propos de #pragma once...


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut A propos de #pragma once...
    Bonjour,

    J'aimerais juste si #pragma once est une instruction standard ou pas. Je n'ai pas trouvé la réponse sur internet. Apparement elle est connue de tout les compilateur, mais GCC la trouve obsolete. Moi je la trouve pas obsolete du tout ^^.

    Qu'en est-il vraiment ?
    Puis-je ou non remplacer les #ifndef FILE \ #define FILE \ #endif ?
      0  0

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tiens je pensais que le #pragma once était spécifique à Visual C++.
    En tout cas il n'est pas standard, d'ailleurs je me demande si une seule directive #pragma l'est.
    Quand tu dis "elle est connue de tous les compilos", attention si tu as fait un test toi-même ça a des chances de compiler même si ton #pragma n'est pas reconnu, les compilos ignorant les #pragma qu'ils ne connaissent pas.
      0  0

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Bon, ben tant pis :-(. On va faire sans...
      0  0

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Août 2004
    Messages : 60
    Points : 88
    Points
    88
    Par défaut La bonne pratique
    La bonne pratique est de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef MON_FICHIER_H
    #define MON_FICHIER_H
    #pragma once
     
    ... ton code ici
     
    #endif
    L'effet du #ifdef, c'est que le compilateur doit ignorer tout ce qu'il lit jusqu'au #endif à partir de la seconde lecture. Ca te garantie que inclure plusieurs fois ton fichier n'entrainera pas d'erreurs, mais par contre tu aura un ralentissement de la compilation, car le compilateur continue de lire le fichier plusieurs fois même si c'est pour en ignorer le contenu.

    Avec le #pragma once, tu peux indiquer au compilateurs qui implémentent cette directive (la plupart) de ne plus lire le fichier à partir de la seconde fois, ce qui accèlére la compilation. Si un compilateur ne connait pas cette directive, il va l'ignorer cette ligne #pragma, donc tu dois quand même mettre le #ifdef pour que ton code compile correctement partout.

    Enfin, GCC implémente une optimisation spécifique qui fait, que si il reconnait l'idiome classique du #ifdef/#endif en début/fin de fichier, il applique tout seul le comportement préconisé par le #pragma once.
    Du coup, le programmeur n'a plus besoin de le mettre, d'où le warning indiquant que la directive est obsolete.
      0  0

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Aucun #pragma n'est standard. Par définition, c'est un moyen propre à chaque compilateur de proposer des spécificité. C'est en quelque sorte un moyen standard de faire des choses qui ne le sont pas.
      0  0

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Tout compris ^^.
    Merci à vous deux pour vos interventions éclairée ;-).
      0  0

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Quoique ...
    Bonjour,
    En surfant un peu,
    J'ai vu que :
    #pragma once

    remplace
    1. #ifndef _MYHEADER_
    2.
    3. #define _MYHEADER_
    4.
    5. code
    6.
    7.
    8. #endif


    La différence entre les 2, c'est que
    -- "pragma once, ne sera compilé qu'une seule fois (d'où ONCE) et pas prétesté lors de la compilation, alors que
    --- ifndef def ...endif, sera prétesté à chaque fois que ta biblio (.h) sera appelée.
    Et voilou !!!
    Bonne continuation à tous.
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] #pragma once
    Par hat54 dans le forum C++
    Réponses: 5
    Dernier message: 13/01/2006, 14h31
  2. #pragma once
    Par r0d dans le forum MFC
    Réponses: 5
    Dernier message: 11/06/2005, 10h39
  3. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22
  4. Fonctionnement de la compression DivX
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/09/2002, 14h10
  5. A propos du composant DBGrid
    Par _Rico_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/07/2002, 09h18

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