\u000d
Втеча закінчується коментар , тому що \u
пагони поступово перетворюються на відповідні символи Unicode , перш ніж програма лексеми. Ви можете однаково використовувати \u0057\u0057
замість того, //
щоб розпочати коментар.
Це помилка у вашій IDE, яка повинна виділити синтаксис рядком, щоб зрозуміти, що \u000d
коментар закінчується.
Це також помилка дизайну в мові. Зараз це неможливо виправити, оскільки це порушить програми, які залежать від цього. \u
Escape слід або перетворити на відповідний символ Unicode компілятором лише в контекстах, де це "має сенс" (рядкові літерали та ідентифікатори, і, мабуть, ніде більше), або їм було б заборонено генерувати символи в діапазоні U + 0000–007F або те й інше. Будь-яка з цих семантик не завадила б коментарю припинитися \u000d
втечею, не втручаючись у випадки, коли \u
втечі є корисними - зауважте, що це включає використання \u
ескадрів у коментарях як спосіб кодування коментарів у не латинській письмі, оскільки текстовий редактор міг би розширити уявлення про те, куди\u
втечі важливіші, ніж робить компілятор. (Я не знаю жодного редактора або IDE, який відображатиме \u
вхідні файли як відповідні символи в будь-якому контексті.)
Існує аналогічна помилка проектування в сімействі C 1, де обробляється зворотний косий рядок перед визначенням меж коментарів, наприклад,
// this is a comment \
this is still in the comment!
Я підводжу це для того, щоб проілюструвати, що зробити цю конкретну дизайнерську помилку нескладно, а не усвідомлювати, що це помилка, поки не пізно її виправити, якщо ви звикли думати про токенізацію та розбір способів думки програмістів-компіляторів. про токенізацію та розбір. В основному, якщо ви вже визначили свою формальну граматику, а потім хтось придумав особливий синтаксичний випадок - триграфи, зворотній косий рядок, кодування довільних символів Unicode у вихідних файлах, обмежених ASCII, незалежно від того, на що потрібно вступити, простіше додати пропуск трансформації перед токенізатором, ніж це для повторного визначення токенізатора, щоб звернути увагу на те, де є сенс використовувати цей особливий випадок.
1 Для педантів: Я усвідомлюю, що цей аспект С був на 100% навмисним, з обґрунтуванням - я цього не вигадую - що це дозволить вам механічно примусово застосовувати код з довільно довгими рядками на перфокарти. Це все ж було неправильним дизайнерським рішенням.