utiliza texto son sirven que programar pasos para las etiquetas etiqueta ejemplo documento desde declarar curso cuales como cero básico basicas aprenderaprogramar aprende c++ boost c-preprocessor header-files pragma

c++ - son - texto en html ejemplo



¿Cuál es la razón para#pragma una vez dentro de los guardias de cabecera? (5)

Puede reproducir el efecto de #pragma once de manera estándar usando lo siguiente:

#if !defined GUARD_SYMBOL #include "GUARDED_FILE" #endif

Aunque es mucho más verboso. Como han dicho otros, ayuda con los tiempos de compilación, ya que el archivo no se busca / abre en lugar de abrir el archivo e ignorar todo lo que contiene, ya que el preprocesador aún tiene que analizarlo.

Acabo de ver esto dentro <boost/asio.hpp>

#ifndef BOOST_ASIO_HPP #define BOOST_ASIO_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) /// .... #endif // BOOST_ASIO_HPP

Sin _MSC_VER cuenta las _MSC_VER preprocesador _MSC_VER , ¿cuál es el beneficio de tener el #pragma once en este caso? ¿No se asegura la protección del encabezado del preprocesador en todos los casos y en todas las plataformas, el contenido del encabezado solo se included una vez?


Sí, los protectores de encabezado garantizan que el contenido del encabezado se incluya solo una vez. pero aquí está utilizando #pragma para verificar otra definición y no incluir el archivo.

El siguiente enlace es una pregunta existente sobre los guardias de cabecera en SO.

Propósito de los guardias de cabecera



#pragma once especifica que el compilador incluirá (abrirá) el archivo solo una vez cuando compile un archivo de código fuente. Esto puede reducir los tiempos de compilación ya que el compilador no se abrirá y leerá el archivo después del primer #include del módulo.

Si no #pragma once , el archivo se abrirá cada vez que sea necesario y el compilador dejará de analizarlo en #ifndef BOOST_ASIO_HPP , si se ha definido.


#pragma once tiene el mismo propósito, pero las guardas de inclusión están destinadas a requerir un análisis más profundo para garantizar que un archivo se incluya exactamente una vez, por ejemplo

// somerandomfileinmyproject.cpp #undef BOOST_ASIO_HPP #include <bost/asio.cpp>

A menos que el compilador maneje tales casos correctamente, todavía necesita abrir el archivo y pasarlo a través del preprocesador aunque ya se haya incluido anteriormente.