Когда сращивание линий CPP отменяется в необработанных строках C++0x, требуется ли соответствующая реализация для сохранения исходной последовательности новой строки?

последний проект C++0x, n3126, говорит:

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

...

внутри R-char-последовательность необработанного строкового литерала, любые преобразования, проведенные в фазы 1 и 2 (триграфы, универсальные имена символов и сращивание линий) возвратившегося.

технически это означает, что препроцессор C++ распознает только обратную косую черту, за которой следует символ новой строки, но я знаю, что некоторые реализации C++ также позволяют заканчивать строки в стиле Windows или classic Mac.

потребуются ли соответствующие реализации C++0x для сохранения последовательности новой строки, которая сразу же последовала за символом обратной косой черты в R-char-последовательности необработанной строки? Возможно, лучший вопрос: будет ли это ожидается, что компилятор Windows C++0x отменит каждое соединение строк с помощью "\rn" вместо "\n"?

2 ответов


перевод Фаза 1 начинается с

физические символы исходного файла сопоставляется, в реализации манера, к основному исходному символу set (ввод символов новой строки для индикаторов конца строки) если необходимый. Триграф последовательности (2.3) будут заменены [...]

Я бы интерпретировал требование "любые преобразования, выполняемые в фазах 1 и 2 (триграфы, универсальные имена символов и сращивание строк)" как явно не возврат преобразования из символов исходного файла в базовый набор символов исходного кода. Вместо этого исходные символы позже преобразуются в набор символов выполнения, и вы получаете символы новой строки.


Если вам нужна определенная последовательность окончания строки, вы можете вставить ее явно и использовать конкатенацию строковых литералов:

char* nitpicky = "I must have a \r\n line ending!\r\n"
"Otherwise, some other piece of code will misinterpret this line!";