Подтвердить что ты не робот

С++ однострочные комментарии, а затем \transforms в многострочном комментарии

Где это подтверждено в стандарте С++, функция, которая, если строка комментируется с использованием стиля //some comment\ (в конце строки помещается \), комментарий преобразуется в многострочный?

Протестировано с g++ 4.8 и VS 2012

//some interesting stuff\
another interesting stuff\
etc
4b9b3361

Ответ 1

Стандарт С++, 2.2 - фазы перевода. Фаза 2 включает

Каждый экземпляр символа обратной косой черты (\), за которым сразу следует символ новой строки, удаляется, сращивание физических линий источника для формирования логических строк источника.

а фаза 3 включает

Каждый комментарий заменяется одним пробелом

Таким образом, обратная косая черта в конце строки распознается перед комментариями.

Эквивалентные фазы 2 и 3 для C можно найти в стандарте C (5.1.1.2. Фазы перевода в моем проекте).

Ответ 2

A \, за которым следует новая строка, устраняется очень рано процесс перевода, прежде чем компилятор начнет искать комментарии и конец комментариев, см. раздел 2.2, "Фазы перевод.

Ответ 3

Вы хотите знать C или С++? ( РЕДАКТИРОВАТЬ: В исходном вопросе OP запросил C/С++)

В следующем разделе от ISO/IEC 9899: Проект Комитета TC2 - 6 мая 2005 г. WG14/N1124 отвечает на ваш вопрос.

5.1.1.2 Фазы перевода

[2] Каждый экземпляр символа обратной косой черты(), за которым сразу следует символ новой строки удаляется, сплайсируя физические исходные строки для формирования логические исходные строки. Только последняя обратная косая черта на любом физическом источнике линия должна иметь право быть частью такого сращивания. Исходный файл который не является пустым, должен заканчиваться символом новой строки, который не должен немедленно предшествовать символу обратной косой черты перед любым таким сплайсинг имеет место.

Для С++ вы можете обратиться к Phase 2 на en.cppreference.com

1) Всякий раз, когда обратная косая черта появляется в конце строки (сразу за которым следует символ новой строки), как обратная косая черта, так и символ новой строки удалены, объединяя две физические линии источника в один логический источник линия. Это однопроходная операция, строка, заканчивающаяся на два обратная косая черта, за которой следует пустая строка, не объединяет три строки в один). Если на этом образуется универсальное имя символа (\ uXXX) фаза, поведение undefined.
2) Если непустой исходный файл не заканчивается символом новой строки после этого шага (не было ли newline изначально или закончилась обратным слэшем), поведение undefined (до С++ 11) добавляется завершающий символ новой строки (поскольку С++ 11)

Если ваша текущая строка является комментарием одной строки, следующая строка будет перевариваться в качестве комментария.

Ответ 4

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

Вы можете добавить "\" в любом месте кода, и новая строка будет проигнорирована.

В качестве лучшей ссылки пункт 2.2 стандарта:

Каждый экземпляр символа обратной косой черты(), за которым сразу следует новая строка символ удаляется, сплайсинг физических исходных строк образуют логические строки источника. Только последняя обратная косая черта на любом физическом исходная линия должна иметь право быть частью такого сращивания. Если, как результат, последовательность символов, которая соответствует синтаксису создается имя универсального символа, поведение undefined. исходный файл, который не пуст, и который не заканчивается в новой строке символ или заканчивается символом новой строки, которому предшествуют символом обратной косой черты до того, как произойдет любое такое сращивание, обрабатываться так, как если бы дополнительный символ новой строки был добавлен к файл.

Это не ясно, что произойдет, если последний символ в файл - обратная косая черта. В таком случае, предположительно, результат добавления новая строка не должна быть линейным сращиванием, а скорее обратным слэшем токен предварительной обработки (который будет диагностирован как недопустимый токен в фаза 7), но это должно быть указано.

Ответ 5

По Рабочий проект, стандарт для программирования Язык С++, Глава 2 Лексические соглашения, 2.1 - 2):

Каждый экземпляр символа новой строки и непосредственно предшествующий символ обратной косой черты - символ обратной косой черты(), за которым следует удаляется символ новой строки, сплайсируя физические исходные строки образуют логические строки источника. Только последняя обратная косая черта на любом физическом исходная линия должна иметь право быть частью такого сращивания.

Это также применимо к комментариям, и это все еще является частью окончательной версии.

Ответ 6

Это в С++ Standard, как и все о языке С++. Вы можете бесплатно загрузить черновик стандарта С++ (почти для всех, кроме людей, участвующих в разработке языка С++ и писателей компилятора, проект достаточно хорош), просто Google для "С++ Standard Draft".