Я читал Рабочий проект C++ и был удивлен, когда наткнулся на, казалось бы, самую простую функцию программирования: комментарии! (и еще больше удивился, что не нашел в комментариях ничего о поведении escape-последовательностей!)
Цитата из черновика С++:
Если в таком комментарии есть символ перевода страницы или символ вертикальной табуляции, между ним и символом новой строки, завершающим комментарий, должны стоять только пробельные символы; диагностика не требуется.
Я борюсь с тем, что именно подразумевается под этой цитатой.
Я придумал это:
// This is a comment\f \tThis is still part of the comment\nThis is not part of the comment
Похоже, escape-последовательности влияют на комментарии, поэтому я немного поиграл с этим, но так и не пришел к какому-то серьезному выводу.
// This is a comment\nThis is not part of the comment
Как говорится в проекте:
который заканчивается непосредственно перед следующим символом новой строки
Итак, я подумал, что если я просто добавлю символ новой строки в комментарий, остальная часть комментария не будет рассматриваться как «комментарий»? Но вроде как..? Что с этим делать?
@NathanPierson Я сделал это точно так, как показано в примерах выше.
Итак, вы сами не добавили символ новой строки в комментарий. Эскейп-последовательности применяются к строковым и символьным литералам. Комментариев нет.
Это не перевод формы или вертикальная табуляция, это обратная косая черта с другими символами после них.
Что они означают в черновике тогда? Не могли бы вы привести пример?
@Eldinur Они означают перевод формы и символы вертикальной табуляции - это коды ASCII (или что-то еще). Лайк 0x0B в файле (vt)
@DaveNewton А, хорошо, теперь я понял, спасибо. Значит, буквальные escape-последовательности в комментариях бессмысленны?
Эскейп-последовательности применяются к строковым и символьным литералам. Комментариев нет. (Я украл предыдущий комментарий.)





«Если в таком комментарии есть символ перевода страницы или символ вертикальной табуляции, между ним и символом новой строки, завершающим комментарий, должны стоять только пробельные символы; диагностика не требуется».
Это говорит о буквальном переводе формы и символах вертикальной табуляции, а не об управляющих последовательностях (которые не интерпретируются в комментариях).
Правильный комментарий:
// comment<a literal vertical-tab><whitespaces...><newline>
Также действует:
// hello\f\f\f\fworld<newline>
Вот недопустимый комментарий, потому что за вертикальной табуляцией следует что-то еще, кроме пробелов перед новой строкой:
// comment<a literal vertical-tab><whitespaces...>FOO<newline>
Каким-то образом вы переключаетесь с вертикальной вкладки на горизонтальную в середине своего ответа... Это не одно и то же. Вполне допустимо иметь горизонтальную вкладку в комментарии. С другой стороны, вертикальные вкладки просто больше не используются.
@Nelfeal Упс, опечатка и ошибка копирования-вставки. Зафиксированный. Спасибо.
Вы добавили в комментарий символ новой строки или поставили символ \, за которым следует символ n?