45 votes

Commentaires sur une seule ligne C ++ suivis par \ transforme un commentaire multiligne

Où est-il documenté dans la norme C ++ la caractéristique selon laquelle si une ligne est commentée à l'aide de //some comment\ style (à la fin de la ligne met \ ), le commentaire est transformé en multiligne?

Testé avec g ++ 4.8 et VS 2012

 //some interesting stuff\
another interesting stuff\
etc
 

94voto

Wojtek Surowka Points 10511

C++ standard, 2.2 - les phases de la traduction. La Phase 2 comprend

Chaque instance d'un caractère barre oblique inverse (\) immédiatement suivie d'une nouvelle ligne de caractère est supprimé, l'épissage source physique des lignes de la forme logique de la source de lignes.

et la Phase 3 comprend

Chaque commentaire est remplacé par un caractère espace

De sorte que la barre oblique à la fin de la ligne est reconnu avant les commentaires.

L'équivalent pour les phases 2 et 3 pour C peut être trouvé dans C standard (5.1.1.2 Traduction phases de mon projet).

12voto

James Kanze Points 96599

Un \ suivi d'une nouvelle ligne est éliminé très tôt dans le processus de traduction, avant que le compilateur ne commence à rechercher des commentaires et la fin des commentaires, voir §2.2, Phases de la traduction.

11voto

Mohit Jain Points 6202

Voulez-vous savoir pour le C ou le C++? (EDIT: Dans la question d'origine OP demandé pour le C/C++)

Pour C section suivante de la norme ISO/IEC 9899:TC2 Comité de Projet - 6 Mai 2005 WG14/N1124 répond à votre question.

5.1.1.2 Traduction phases

[2] Chaque occurrence d'un caractère barre oblique inverse () immédiatement suivie par une caractère de nouvelle ligne est supprimée, l'épissage source physique des lignes de la forme logique lignes de source. Seule la dernière barre oblique inverse sur toute source physique ligne sont éligibles pour faire partie d'une telle jonction. Un fichier source qui n'est pas vide prend fin dans un caractère de nouvelle ligne, qui ne doit pas être immédiatement précédée d'une barre oblique inverse avant tout l'épissage.

Pour C++, vous pouvez vous référer à la Phase 2 à en.cppreference.com

1) Chaque fois que la barre oblique inverse apparaît à la fin d'une ligne (immédiatement suivi par le caractère de saut de ligne), barre oblique inverse et sont de retour à la ligne supprimé, la combinaison de deux physique de la source de lignes dans une logique de source ligne. C'est une seule passe, une ligne se terminant en deux les barres obliques inverses suivie par une ligne vide ne permet pas de combiner trois lignes en un). Si un caractère universel nom (\uXXX) est formée sur ce phase, le comportement est indéfini.
2) Si un non-vide fichier source n' pas fin avec un caractère de saut de ligne après cette étape (si il n'avait pas de de retour à la ligne à l'origine, ou elle s'est terminée par une barre oblique inverse), le comportement est non défini (jusqu'à C++11) une terminaison de caractère de saut de ligne est ajouté (depuis C++11)

Si votre ligne est un commentaire d'une ligne, la ligne suivante serait digérée dans le prolongement, comme un commentaire.

7voto

cerkiewny Points 721

http://www.cplusplus.com/forum/general/33653/

Vous pouvez ajouter le "\" n'importe où dans le code et de retour à la ligne sera ignorée.

Comme une meilleure référence au paragraphe 2.2 de la norme:

Chaque instance d'un caractère barre oblique inverse () immédiatement suivie d'une nouvelle ligne de caractère est supprimé, l'épissage source physique des lignes de la forme logique de la source de lignes. Seule la dernière barre oblique inverse sur la physique ligne de source sont éligibles pour faire partie d'une telle jonction. Si, comme un résultat, une séquence de caractères qui correspond à la syntaxe d'un universelle-personnage-nom du produit, le comportement est indéfini. Un fichier source qui n'est pas vide et qui n'a pas de fin dans une nouvelle ligne de caractère, ou qui se termine par un caractère de nouvelle ligne immédiatement précédé par un caractère barre oblique inverse avant d'épissage a lieu, sont être traitées comme si on ajoute un caractère de nouvelle ligne ont été ajoutés à le fichier.

Ce n'est pas claire en ce qui concerne ce qui se passe si le dernier caractère de la le fichier est une barre oblique inverse. Dans un tel cas, sans doute le résultat de l'ajout le retour à la ligne ne doit pas être une épissure en ligne, mais plutôt une barre oblique inverse prétraitement-jeton (qui sera diagnostiquée comme une défaillance de jeton dans phase 7), mais qui doivent être clairement énoncés.

5voto

Shlublu Points 6199

Comme par Projet de Travail, Standard pour la Programmation Le langage C++, Chapitre 2 Lexicale conventions, 2.1 - 2) :

Chaque instance d'un caractère de nouvelle ligne et un précédant immédiatement le caractère barre oblique inverse d'une barre oblique inverse () immédiatement suivie par une nouvelle ligne de caractère est supprimé, l'épissage source physique des lignes de la forme logique de la source de lignes. Seule la dernière barre oblique inverse sur la physique ligne de source sont éligibles pour faire partie d'une telle jonction.

Ceci est aussi valable pour les commentaires et c'est encore une partie de la version finale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X