He estado mirando el código fuente de las bibliotecas Boost , y he notado que a menudo hay signos de una sola libra sin ninguna directiva de preprocesador adjunta. Leí el manual del preprocesador GCC y la guía de especificaciones y no puedo encontrar nada al respecto.
(1) #ifndef BOOST_CONFIG_HPP
(2) # include <boost/config.hpp>
(3) #endif
(4) #
(5) #if defined(BOOST_HAS_PRAGMA_ONCE)
(6) # pragma once
(7) #endif
En la línea 4, no hay nada después del signo de libra. ¿Qué efecto tiene esto? ¿Está definido en la especificación del preprocesador C (CPP)?
Como Boost es una biblioteca multiplataforma, supongo que cualquier CPP debería analizarla correctamente. ¿Cuál sería el efecto / efectos secundarios de tener signos aleatorios de libra / hash en todo el código?
c++
c
boost
c-preprocessor
callyalater
fuente
fuente
Respuestas:
Una
#
sola en una línea no tiene ningún efecto. Supongo que se está utilizando por valor estético.El estándar C dice:
El estándar C ++ dice lo mismo:
fuente
Hace que el código fuente se vea bonito, eso es todo.
Destaca el hecho de que todo el bloque es una sección de preprocesador.
Y, de hecho, los preprocesadores C y C ++ deben ignorar
#
en una línea.fuente
{
o}
en vim).#
evitaría que use{
o}
. De hecho, puede ser más fácil presionar}
dos veces para saltar sobre el bloque (en el ejemplo del OP) que no poder saltar al medio de los dos bloques.Siempre verifique una fuente autorizada en lugar de depender de otros recursos. C está estandarizado como ISO 9899 :: 2011, C ++ también tiene un estándar ISO. Ambos son bien aceptados y los borradores finales están disponibles mediante una breve búsqueda. El estándar C indica en 6.10.7 (C ++ tiene el mismo texto):
Esta es una directiva nula , tanto como una
;
sin una expresión anterior en el lenguaje central es una declaración nula .Para el preprocesador es solo para formatear / legibilidad resaltar que las líneas pertenecen semánticamente juntas. (el punto y coma OTOH es semánticamente relevante).
fuente