L' \u000d
évasion termine un commentaire car les \u
échappements sont uniformément convertis en caractères Unicode correspondants avant que le programme ne soit tokenisé. Vous pouvez également utiliser \u0057\u0057
au lieu de //
pour commencer un commentaire.
Il s'agit d'un bogue dans votre IDE, qui devrait mettre en surbrillance la ligne pour indiquer clairement que \u000d
le commentaire se termine.
Il s'agit également d'une erreur de conception dans la langue. Cela ne peut pas être corrigé maintenant, car cela casserait les programmes qui en dépendent. \u
les échappements doivent être convertis en caractère Unicode correspondant par le compilateur uniquement dans des contextes où cela "fait sens" (littéraux de chaîne et identificateurs, et probablement nulle part ailleurs) ou ils doivent avoir été interdits pour générer des caractères dans la plage U + 0000–007F , ou les deux. L'une ou l'autre de ces sémantiques aurait empêché le commentaire d'être interrompu par l' \u000d
évasion, sans interférer avec les cas où les \u
échappements sont utiles - notez que cela inclut l' utilisation des \u
échappements dans les commentaires comme moyen d'encoder les commentaires dans un script non latin, car le éditeur de texte pourrait avoir une vision plus large de l'endroit où\u
les échappements sont significatifs par rapport au compilateur. ( Cependant, je ne connais aucun éditeur ou IDE qui affichera les \u
échappements en tant que caractères correspondants dans n'importe quel contexte.)
Il existe une erreur de conception similaire dans la famille C, 1 où la barre oblique inversée est traitée avant que les limites des commentaires ne soient déterminées, par exemple
// this is a comment \
this is still in the comment!
J'apporte cela pour illustrer qu'il se trouve qu'il est facile de faire cette erreur de conception particulière, et de ne pas réaliser que c'est une erreur jusqu'à ce qu'il soit trop tard pour la corriger, si vous avez l'habitude de penser à la tokenisation et à l'analyse de la façon dont les programmeurs du compilateur pensent sur la tokenisation et l'analyse. Fondamentalement, si vous avez déjà défini votre grammaire formelle et que quelqu'un propose un cas spécial syntaxique - trigraphes, barre oblique inversée, encodage de caractères Unicode arbitraires dans des fichiers source limités en ASCII, peu importe - qui doit être coincé, il est plus facile de ajouter un passage de transformation avant le tokenizer que de redéfinir le tokenizer pour faire attention à l'endroit où il est judicieux d'utiliser ce cas spécial.
1 Pour les pédants: je suis conscient que cet aspect de C était 100% intentionnel, avec la justification - je n'invente rien - qu'il vous permettrait de forcer mécaniquement l'ajustement de code avec des lignes arbitrairement longues sur des cartes perforées. C'était toujours une décision de conception incorrecte.