Если в исходных строках C++0x отменен сплайсинг строки CPP, требуется ли соответствующая реализация для сохранения исходной последовательности новой строки?
В последней версии C++0x, n3126, говорится:
Каждый экземпляр символа обратной косой черты (\), за которым сразу следует символ новой строки, удаляется, объединяя физические исходные строки для формирования логических исходных строк.
...
Внутри r-char-последовательности необработанного строкового литерала все преобразования, выполняемые на этапах 1 и 2 (триграфы, имена универсальных символов и сращивание строк), возвращаются.
Технически это означает, что препроцессор C++ распознает только обратную косую черту, за которой следует символ новой строки, но я знаю, что некоторые реализации C++ также допускают окончания строк в Windows или классическом стиле Mac.
Потребуются ли соответствующие реализации C++ 0x для сохранения последовательности новой строки, которая следует сразу за символом обратной косой черты \
в последовательности r-char необработанной строки? Может быть, лучше спросить: можно ли ожидать, что компилятор Windows C++0x отменит каждую строку с "\\\r\n"
вместо "\\\n"
?
2 ответа
Фаза перевода 1 начинается с
Физические символы исходного файла отображаются, в зависимости от реализации, в базовый исходный набор символов (ввод символов новой строки для индикаторов конца строки), если это необходимо. Триграф последовательности (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!";