acabamos de ver esto dentro <boost/asio.hpp>
¿Cuál es el motivo de #pragma una vez dentro de los protectores de encabezado?
#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 tener en cuenta los cheques _MSC_VER
preprocesador, ¿cuál es el beneficio de tener el #pragma once
en este caso? ¿El protector de encabezado del preprocesador no garantiza en todos los casos y en todas las plataformas, que el contenido del encabezado solo sea included
una vez?
¿Estás diciendo que el encabezado está abierto y leído solo una vez si tenemos #pragma? Los protectores de cabecera significan que el archivo siempre está abierto, pero se omite el contenido dentro de los guardias, ¿verdad? Es mi entendimiento correcto? Si solo pudiera demostrar esto, lo veo suceder :) – dubnde
En caso de #pragma una vez, no siempre está abierto. Esta directiva hace que el compilador recuerde no abrirla nuevamente (más de una vez). Es por eso que esta directiva es superior a #ifndef, que podría omitirse. Sin embargo, muchas personas todavía usan #ifndef para admitir compiladores antiguos que no reconocen #pragma una vez. –