J'ai consulté le code source des bibliothèques Boost , et j'ai remarqué qu'il y a souvent des signes dièse, sans aucune directive de préprocesseur qui leur est associée. J'ai lu le manuel du préprocesseur GCC et le guide des spécifications et je ne trouve rien à ce sujet.
(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
Sur la ligne 4, il n'y a rien après le signe de la livre. Quel effet cela a-t-il? Est-il défini dans la spécification du préprocesseur C (CPP)?
Comme Boost est une bibliothèque multiplate-forme, je suppose que tout PPC devrait l’analyser correctement. Quels seraient les effets/effets secondaires de la présence de signes dièse/hachage aléatoires dans le code?
UNE #
seul sur une ligne n'a aucun effet. Je suppose que c'est utilisé pour une valeur esthétique.
La norme C dit:
6.10.7 Directive nulle
Sémantique
Une directive de prétraitement de la forme
# new-line
n'a aucun effet.
La norme C++ dit la même chose:
16.7 Directive null [cpp.null]
Une directive de prétraitement de la forme
# new-line
n'a aucun effet.
Cela rend le code source joli, c'est tout.
Souligne le fait que le bloc entier est une section de préprocesseur.
Et en effet, les préprocesseurs C et C++ doivent ignorer #
sur une ligne.
Vérifiez toujours une source faisant autorité au lieu de vous fier à d'autres ressources. C est normalisé ISO 9899 :: 2011, C++ possède également une norme ISO. Les deux sont bien acceptés et les versions finales disponibles par une courte recherche. Les états standard C dans 6.10.7 (C++ a à peu près le même texte):
Une directive de prétraitement de la forme
# new-line
n'a aucun effet.
Ceci est une directive null , autant qu'un ;
sans expression précédente dans le langage de base est une instruction null .
Pour le préprocesseur, il est juste pour le formatage/la lisibilité de souligner que les lignes appartiennent sémantiquement ensemble. (le point-virgule OTOH est sémantiquement pertinent).