- Pragma once
-
Pragma once
- El título de este artículo se muestra incorrectamente debido a limitaciones técnicas. El título correcto es #pragma once.
Del Lenguaje de programación C y C++, #pragma once es una directiva de Preprocesador de C no-estandar pero con un extenso soporte. Está diseñado para asegurar que el código fuente que lo invoca sea incluido una única vez. Así pues,
#pragma oncesirve al mismo propósito que la protección de macros, pero con una menor cantidad de código y sin la posibilidad de que lleguen a coincidir las identificaciones.El código con
#pragma oncesería:- Archivo "abuelo.h"
#pragma once struct foo { int miembro; };
- Archivo "padre.h"
#include "abuelo.h"- Archivo "hijo.c"
#include "abuelo.h" #include "padre.h"
Ventajas y desventajas
Usando
#pragma onceen lugar de la protección de macros (también visto como protección de inclusiones (include) ) generalmente aumentará la velocidad de compilación puesto que es un mecanismo de nivel más alto.Algunos compiladores como GCC incluyen código especial para reconocer y optimizar las protecciones de macros, por lo que no se conseguirá a penas un aumento en la velocidad usando, en este caso, #pragma once.[1]
Como el propio compilador es el responsable del funcionamiento de
#pragma once, no será necesario que el programador cree nuevos nombres de macros tales como_ABUELO_H_, tal como debería haber hecho en el ejemplo anterior para evitar su repetida inclusión si no hubiera usado#pragma once. Esto elimina la posibilidad de nombres repetidos, lo que significa que asegurará la inclusion de todos los archivos de cabecera una única vez. Además implica la escritura de menos código para el programador.Sin embargo el programador debe confiar en la capacidad del compilador de hacer funcionar
#pragma oncede forma correcta. Si el compilador comete un fallo como, por ejemplo, al reconocer dos Enlace simbólicos con distintos nombres que apunten al mismo fichero, entonces la compilación fallará. Originalmente GCC dio un aviso declarando#pragma once"obsoleto" cuando compilaba código que lo usaba. Sin embargo, desde la versión 3.4 de GCC, el funcionamiento del código#pragma oncefue corregido asegurando un funcionamiento correcto con Enlace simbólicos y Enlace duros, con lo que el aviso fue eliminado.[2] [3]Se pueden usar ambos
#pragma oncey protecciones de macro para escribir código portable que puede, además, tomar la ventaja de las optimizaciones de#pragma onceque el compilador soporte:- Archivo "abuelo.h"
#pragma once #ifndef _ABUELO_H_ #define _ABUELO_H_ struct foo { int miembro; }; #endif /* _ABUELO_H_ */
Enlaces externos
Categorías: Wikipedia:Título erróneo | Lenguaje de programación C | C++
Wikimedia foundation. 2010.