2011-04-04 9 views
6

Para evitar múltiple incluye un archivo de cabecera, uno de mi amigo sugirió la siguiente manera¿Cuál es eficiente usar #pragma una vez 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 

donde _INTERFACEMESSAGE_HPP es sólo un identificador

pero cuando declarar una clase utilizando Visual Studio 2005 IDE me sale una declaración #pragma vez en el inicio de la definición de clase cuando tomó la ayuda de MSDN para encontrar el propósito de #pragma vez me dio la siguiente explicación

"Especifica que el archivo se incluirá (abrirá) solo una vez por el compilador al compilar un archivo de código fuente. "

Alguien por favor diga que es el enfoque correcto ?, si ambos son correctos entonces ¿cuál es la diferencia? Es un enfoque es mejor que el otro?

+1

No utilice identificadores que comiencen con un guión bajo seguido de una letra mayúscula; están reservados. – CesarB

Respuesta

6

gcc tiene pragma una vez como obsoletos. Se debe utilizar la norma incluye guardias. Todas las directivas pragma son definidas por definición por definición. Por lo tanto, si desea portabilidad, no las use.

+8

Ya no desaprobado desde gcc 3.4, ver http://gcc.gnu.org/gcc-3.4/changes.html – CesarB

2

El primer enfoque es el enfoque genérico que funciona con todos los compiladores y también el anterior. #pragma once enfoque es específico del compilador.

4

pragmas son compilador específico, así que usaría #ifndef.

Las directivas de preprocesador se resuelven durante (en realidad, antes) la compilación, por lo que no hacen una diferencia en el tiempo de ejecución, excepto tal vez por el tiempo de compilación.

Sin embargo, nunca notará una diferencia en el tiempo de compilación de estas dos alternativas a menos que las use varias veces, supongo.

Cuestiones relacionadas