2011-04-04 16 views
6

Per evitare multipla include un file di intestazione, un mio amico ha suggerito il seguente modoQuale è efficace usare #pragma una volta o #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 

dove _INTERFACEMESSAGE_HPP è solo un identificatore

ma quando dichiaro una classe utilizzando Visual Studio 2005 IDE ottengo un economico come #pragma volta alla partenza della definizione di classe quando ho preso l'aiuto di MSDN per trovare lo scopo di #pragma volta mi ha dato la seguente spiegazione

"Specifica che il file verrà incluso (aperto) una sola volta dal compilatore durante la compilazione di un file di codice sorgente. "

Qualcuno informi che è l'approccio giusto ?, se entrambi sono corrette, allora qual è la differenza? È un approccio è migliore rispetto agli altri?

+1

Non utilizzare identificatori che iniziano con un trattino basso seguito da una lettera maiuscola, sono riservati. – CesarB

risposta

6

gcc ha pragma una volta come deprecato. Si consiglia di utilizzare lo standard Tutte le direttive pragma sono definite per definizione, quindi se si desidera la portabilità non utilizzarle

+8

Non più deprecato da gcc 3.4, vedere http://gcc.gnu.org/gcc-3.4/changes.html – CesarB

2

Il primo approccio è l'approccio generico che funziona con tutti i compilatori ed è anche il più vecchio in circolazione. L'approccio #pragma once è specifico del compilatore

4

specifica del compilatore, quindi userei #ifndef.

Le direttive del preprocessore vengono risolte durante la compilazione (in realtà, prima), quindi non fanno la differenza in runtime tranne forse per la compilazione.

Tuttavia, non si noterà mai una differenza nel tempo di compilazione da queste due alternative a meno che non le utilizzi diverse migliaia di volte.

Problemi correlati