Les doubles traits de soulignement sont réservés à l'implémentation
La réponse la plus votée cite la programmation en C ++: règles et recommandations :
"L'utilisation de deux traits de soulignement (` __ ') dans les identificateurs est réservée à l'usage interne du compilateur selon la norme ANSI-C. "
Cependant, après avoir lu quelques C ++ et les normes C, je ne pouvais trouver aucune mention de underscores étant limité à seulement une utilisation interne du compilateur. Les normes sont plus générales, réservant un double soulignement pour la mise en œuvre .
C ++
C ++ (version de travail actuelle, consulté le 2019-5-26) indique lex.name
:
- Chaque identifiant contenant un double trait de soulignement __ ou commençant par un trait de soulignement suivi d'une lettre majuscule est réservé à l'implémentation pour toute utilisation.
- Chaque identificateur qui commence par un trait de soulignement est réservé à l'implémentation pour être utilisé comme nom dans l'espace de noms global.
C
Bien que cette question soit spécifique au C ++, j'ai cité des sections pertinentes des normes C 99 et 17:
C99 section 7.1.3
- Tous les identifiants qui commencent par un trait de soulignement et une lettre majuscule ou un autre trait de soulignement sont toujours réservés pour toute utilisation.
- Tous les identificateurs qui commencent par un trait de soulignement sont toujours réservés pour être utilisés comme identificateurs avec une portée de fichier dans les espaces de nom ordinaire et de balise.
C17 dit la même chose que C99.
Quelle est la mise en œuvre ?
Pour C / C ++, l' implémentation fait généralement référence aux ressources d'ensemble nécessaires pour produire un exécutable à partir de fichiers source utilisateur. Ceci comprend:
- préprocesseur
- compilateur
- éditeur de liens
- bibliothèque standard
Exemples d'implémentations
Il existe un certain nombre d'implémentations C ++ différentes mentionnées sur Wikipedia . (pas de lien d'ancrage, ctrl + f "implémentation")
Voici un exemple d'implémentation C / C ++ de Digital Mars réservant certains mots-clés à une de leurs fonctionnalités.