2011-04-04 3 views
6

Pour éviter plusieurs comprend d'un fichier d'en-tête, l'un de mes ami a suggéré la manièreQui est efficace pour utiliser #pragma une fois ou #ifndef #endif?

#ifndef _INTERFACEMESSAGE_HPP 
    #define _INTERFACEMESSAGE_HPP 
    class CInterfaceMessage 
    { 
    //Declaration of class goes here 
    //i.e declaration of member variables and methods 
    private: 
    int m_nCount; 
    CString m_cStrMessage; 
    public: 
    CString foo(int); 
} 
    #endif 

suivant où _INTERFACEMESSAGE_HPP est juste un identifiant

mais quand je déclare une classe en utilisant Visual Studio 2005 IDE je reçois un déclaration #pragma une fois au départ de la définition de la classe quand je pris l'aide de msdn pour trouver le but de #pragma une fois il m'a donné l'explication suivante

"Spécifie que le fichier ne sera inclus (ouvert) qu'une seule fois par le compilateur lors de la compilation d'un fichier de code source. "

Quelqu'un s'il vous plaît dire quelle est la bonne approche ?, si les deux sont corrects alors quelle est la différence? Est une approche est meilleure que l'autre? Gcc

+1

N'utilisez pas d'identifiants commençant par un trait de soulignement suivi d'une lettre majuscule, ils sont réservés. – CesarB

Répondre

6

a pragma une fois que dépréciée. Vous devez utiliser la norme Les directives pragma sont par définition définies par l'implémentation Donc, si vous voulez la portabilité, ne les utilisez pas

+8

Plus obsolète depuis gcc 3.4, voir http://gcc.gnu.org/gcc-3.4/changes.html – CesarB

2

La première approche est l'approche générique qui fonctionne avec tous les compilateurs et est aussi la plus ancienne. #pragma once approche est spécifique au compilateur

4

Les pragmas sont compilateur spécifique, donc j'utiliserais #ifndef.

Les directives du préprocesseur sont résolues pendant (en fait, avant) la compilation, de sorte qu'elles ne font pas de différence en cours d'exécution, sauf peut-être pendant la compilation.

Cependant, vous ne remarquerez jamais une différence dans le temps de compilation de ces deux alternatives sauf si vous les utilisez plusieurs milliers de fois je suppose.

Questions connexes