web-dev-qa-db-fra.com

Quel est le but d'un simple signe dièse / hachage (#) sur sa propre ligne dans le pré-processeur C / C ++?

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?

143
callyalater

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.

184
Jonathan Wakely

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.

107
P45 Imminent

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

46