Google
 

martes, diciembre 11, 2007

C++ / #pragma once

Todos los que hayan programado en C/C++ conocerán de sobra los include guards (no sé como lo llaman en español):
#ifdef CABECERA_H
#define CABECERA_H

// TODO código

#endif
Pero hay otro método:
#pragma once

// TODO código
El segundo método ofrece algunas grandes ventajas:
  1. Menos código a escribir (una línea en lugar de tres).
  2. Nos evitamos posibles colisiones con los nombres de las macros (CABECERA_H podría estar usándose en otro archivo).
  3. Ayuda a mejorar la velocidad de compilación ya que si se declara el #pragma once el compilador usa el propio archivo para averiguar si ya ha sido declarado o no, con lo que se evita el tener que pasar el código por el preprocesador.
Como desventaja diría que no forma parte del estandard pero hoy en día todos los compiladores lo soportan.


Fuente: http://www.answers.com/topic/pragma-once

1 comentario:

.: PaJaRo :. dijo...

coincido total y plenamente con usted caballero! si bien "#pragma once" no es estandar, no conozco a un solo compilador de C/C++ que no lo soporte.

otra cosa a mencionar es que, si bien ambos metodos mejoran el tiempo de compilacion, en un proyecto pequeño no se observa diferencia alguna entre uno y otro. y otra cosa mas: hasta donde tengo entendido, el compilador GCC inserta en los archivos de cabecera ambas lineas, a modo de "double check". en definitiva, los ventajas de un metodo por sobre otro no son algo demasiado plausible, al menos en proyectos de pequeña/mediana envergadura.

un saludo y felicitaciones por la nota!