J'ai regardé 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 attachée. J'ai lu le manuel et le guide des spécifications du préprocesseur GCC 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 dièse. 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 multiplateforme, je suppose que tout CPP devrait l'analyser correctement. Quels seraient les effets / effets secondaires d'avoir des signes dièse / hachage aléatoires dans tout le code?
c++
c
boost
c-preprocessor
callyalater
la source
la source
Réponses:
Un
#
seul sur une ligne n'a aucun effet. Je suppose qu'il est utilisé à des fins esthétiques.La norme C dit:
Le standard C ++ dit la même chose:
la source
Cela rend le code source joli, c'est tout.
Met en évidence le fait que l'ensemble du bloc est une section de préprocesseur.
Et en effet, les préprocesseurs C et C ++ doivent ignorer
#
sur une ligne.la source
{
ou}
dans vim).#
vous empêcherait d'utiliser{
ou}
. En fait, il peut être plus facile d'appuyer}
deux fois pour sauter par-dessus le bloc (dans l'exemple de l'OP) que de ne pas pouvoir sauter au milieu des deux blocs.Vérifiez toujours une source faisant autorité au lieu de vous fier à d'autres ressources. C est normalisé comme ISO 9899 :: 2011, C ++ a également une norme ISO. Les deux sont bien acceptés et les versions finales disponibles par une courte recherche. Le standard C indique dans 6.10.7 (C ++ a à peu près le même texte):
Il s'agit d'une directive null , autant qu'une instruction
;
sans expression précédente dans le langage de base est une instruction null .Pour le préprocesseur, c'est juste pour le formatage / la lisibilité de mettre en évidence que les lignes appartiennent sémantiquement ensemble. (le point-virgule OTOH est sémantiquement pertinent).
la source