Pragma once

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 once sirve 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 once serí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 once en 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 once de 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 once fue 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 once y protecciones de macro para escribir código portable que puede, además, tomar la ventaja de las optimizaciones de #pragma once que el compilador soporte:

Archivo "abuelo.h"
#pragma once
#ifndef _ABUELO_H_
#define _ABUELO_H_
 
struct foo {
    int miembro;
};
 
#endif /* _ABUELO_H_ */

Enlaces externos

Obtenido de "Pragma once"

Wikimedia foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Mira otros diccionarios:

  • Pragma once — Правильный заголовок этой статьи  #pragma once. Он показан некорректно из за технических ограничений. В языках программирования Си и C++ #pragma once  нестандартная, но широко распространенная препроцессорная директива, разработанная… …   Википедия

  • Pragma once — In the C and C++ programming languages, #pragma once is a non standard but widely supported preprocessor directive designed to cause the current source file to be included only once in a single compilation. Thus, #pragma once serves the same… …   Wikipedia

  • Include Guard — Der Include Guard (dt: Include Wächter) ist eine Programmiertechnik, um in C oder C++ das Problem der doppelten Einbindung (engl.: double inclusion) zu umgehen. Dieses Problem tritt auf, wenn innerhalb eines Moduls mehrfach die gleiche Header… …   Deutsch Wikipedia

  • C preprocessor — The C preprocessor (cpp) is the preprocessor for the C and C++ computer programming languages. The preprocessor handles directives for source file inclusion (#include), macro definitions (#define), and conditional inclusion (#if). In many C… …   Wikipedia

  • Undefined behavior — In computer programming, undefined behavior is a feature of some programming languages most famously C.[1] In these languages, to simplify the specification and allow some flexibility in implementation, the specification leaves the results of… …   Wikipedia

  • Include guard — In the C and C++ programming languages, an #include guard, sometimes called a macro guard, is a particular construct used to avoid the problem of double inclusion when dealing with the #include directive. The addition of #include guards to a… …   Wikipedia

  • Include guard — Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите статью в соответствии с правилами написания статей …   Википедия

  • Заголовочный файл — (иногда головной файл, англ. header file), или подключаемый файл  в языках программирования файл, механически «вставляемый» компилятором в исходный текст в том месте, где располагается некоторая директива ({$I file.inc} в Паскале,… …   Википедия

  • Препроцессор Си — Препроцессор С/С++  программный инструмент, изменяющий код программы для последующей компиляции и сборки, используемый в языках программирования Си и его потомка C++. Этот препроцессор обеспечивает использование стандартного набора… …   Википедия

  • Header file — In computer programming, particularly in the C and C++ programming languages, a header file or include file is a file, usually in the form of source code, that is automatically included in another source file by the compiler. Typically, header… …   Wikipedia

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”