preprocesador funcion compilador c++ c boost c-preprocessor

funcion - ¿Cuál es el propósito de un solo signo de libra/hash(#) en su propia línea en el preprocesador C/C++?



compilador (3)

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?


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.


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):

Una directiva de preprocesamiento del formulario

# new-line

no tiene efecto.

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).


Un # por sí solo en una línea no tiene ningún efecto. Supongo que se está utilizando por valor estético.

El estándar C dice:

6.10.7 Directiva nula

Semántica

Una directiva de preprocesamiento del formulario

# new-line

no tiene efecto.

El estándar C ++ dice lo mismo:

16.7 Directiva nula [cpp.null]

Una directiva de preprocesamiento del formulario

# new-line

no tiene efecto.