2010-05-16 17 views
5

Probablemente esta sea una pregunta muy tonta, pero necesito estar seguro. Me han dado una declaración de clase en un archivo de cabecera, por ejemplo.Pregunta rápida sobre la compilación condicional (ifndef)

#ifndef file_H 
#define file_H 

class ex{ 
private: 

public: 
}; 

#endif 

y he tenido que escribir las definiciones de métodos en el mismo archivo, lo que he hecho, mi pregunta es ¿el "#endif" quedarse donde está justo después de la declaración de la clase o se vaya al final de mi archivo después de las definiciones del método de clase ?.

Respuesta

6

Al final del archivo.

El objetivo de esta forma de este patrón #ifndef es evitar una situación en la que la misma declaración o definición aparezca dos veces en una unidad de compilación.

Esto se hace porque un archivo C puede incluir varios archivos H, que en algún lugar de la cadena pueden a su vez incluir el mismo archivo. SI simplemente ejecutó el preprocesador sin estos, tendría múltiples copias del archivo H. De esta forma, tienes múltiples copias, pero el preprocesador ignora todo después del primer encuentro.

Como se supone que no debe definir nada más de una vez, si debe colocar las definiciones de métodos en el archivo de encabezado, colóquelas dentro del #endif.

+0

muchas gracias – silent